Stuff in Phobos That Generates Garbage

From D Wiki
Revision as of 22:07, 11 November 2014 by DmitryOlshansky (talk | contribs) (Labeled data: Another update with gchunt v0.1.0)
Jump to: navigation, search

Potential solutions

Closure allocations

CL01: Fixable by manually stack-allocating closure

  A delegate is passed to some function which stores this delegate and
  therefore correctly doesn't mark the parameter as scope. However,
  the lifetime of the stored delegate is still limited to the current
  function (e.g. it's stored in a struct instance, but on the stack).
  Can be fixed by creating a static struct{T... members; void
  doSomething(){access members}} instance on stack and passing
  &stackvar.doSomething as delegate.

CL02: Using delegates to add state to ranges

  ----
  return iota(dim).
    filter!(i => ptr[i])().
    map!(i => BitsSet!size_t(ptr[i], i * bitsPerSizeT))().
    joiner();
  ----
  This code adds state to ranges without declaring a new type: the ptr
  variable is not accessible and needs to be move into a closure.
  Declaring a custom range type is a solution, but not
  straightforward: If the ptr field is moved into the range a closure
  is not necessary. But if the range is copied, it's address changes
  and the delegate passed to map is now invalid.

CL03: Functions taking delegates as generic parameters

  receiveTimeout,receive,formattedWrite accept different types,
  including delegates. The delegates can all be scope to avoid the
  allocation but is void foo(T)(scope T) a good idea? The alternative
  is probably making an overload for delegates with scope attribute.
  (The result is that all functions calling receiveTimeout,... with a
  delegate allocate a closure)

CL04: Solvable with manual memory management

  Some specific functions can't be easily fixed, but the delegates
  they create have a well defined lifetime (for example spawn creates
  a delegate which is only needed at the startup of a new thread, it's
  never used again). These could be malloc+freed.

CL05: Design issue

  These functions generally create a delegate using variables passed
  in as parameters. There's no way to avoid closures here. Although
  manual allocation is an possible, the lifetime is undefined and can
  only be managed by the GC.

CL06: Other

  Two cases can be fixed by moving a buffer into a struct or moving a
  function out of a member function into it's surrounding class.

Labeled data

Here are the results based on the compiler's report (building Phobos unittests with -vgc flag of DMD).

For templates only code that is _instantiated_ by unittests build is accounted for (~ all covered code).

The tool used to post-process -vgc output can be found here, it's not tied to Phobos and should work with any github-based project (to be extended).


Module Artifact Reason Possible Fix(es)
std.algorithm BoyerMooreFinder.this 'new' causes GC allocation:1

indexing an associative array may cause GC allocation:1

std.algorithm Cache.back 'new' causes GC allocation:1
std.algorithm Cache.front 'new' causes GC allocation:1
std.algorithm Cache.popBack 'new' causes GC allocation:1
std.algorithm Cache.popFront 'new' causes GC allocation:1
std.algorithm Levenshtein.AllocMatrix 'delete' requires GC:1

'new' causes GC allocation:1

std.algorithm Levenshtein.path operator ~= may cause GC allocation:1 2 3
std.algorithm SplitterResult.front 'new' causes GC allocation:1
std.algorithm SplitterResult.popFront 'new' causes GC allocation:1
std.algorithm TimSortImpl.ensureCapacity setting 'length' may cause GC allocation:1
std.algorithm TimSortImpl.sort setting 'length' may cause GC allocation:1
std.algorithm castSwitch 'new' causes GC allocation:1 2 3 4

using closure causes GC allocation:1

std.algorithm commonPrefix 'new' causes GC allocation:1
std.algorithm largestPartialIntersection using closure causes GC allocation:1
std.algorithm largestPartialIntersectionWeighted.heapComp indexing an associative array may cause GC allocation:1
std.algorithm makeIndex operator ~ may cause GC allocation:1

using closure causes GC allocation:1

std.algorithm predSwitch 'new' causes GC allocation:1 2
std.algorithm reduce.reduceImpl 'new' causes GC allocation:1
std.algorithm rndstuff 'new' causes GC allocation:1 2

operator ~= may cause GC allocation:1 2

std.algorithm save 'new' causes GC allocation:1 2
std.algorithm splitter.Result.front 'new' causes GC allocation:1
std.algorithm splitter.Result.popFront 'new' causes GC allocation:1
std.array Appender.ensureAddable 'new' causes GC allocation:1 2

operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.array Appender.this 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.array array operator ~= may cause GC allocation:1
std.array arrayAllocImpl 'new' causes GC allocation:1 2 3

operator ~= may cause GC allocation:1 2

std.array assocArray indexing an associative array may cause GC allocation:1
std.array insertInPlace.putDChar setting 'length' may cause GC allocation:1
std.array insertInPlace.trustedMemcopy setting 'length' may cause GC allocation:1
std.array replace 'new' causes GC allocation:1
std.array replaceInPlace operator ~ may cause GC allocation:1
std.array replaceSlice 'new' causes GC allocation:1
std.array replicate 'new' causes GC allocation:1
std.array split operator ~= may cause GC allocation:1 2
std.base64 Base64Impl.Decoder.doDecoding operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.base64 Base64Impl.Decoder.popFront 'new' causes GC allocation:1 2 3 4
std.base64 Base64Impl.Decoder.popFront.endCondition 'new' causes GC allocation:1
std.base64 Base64Impl.Encoder.doEncoding setting 'length' may cause GC allocation:1
std.base64 Base64Impl.Encoder.popFront 'new' causes GC allocation:1 2
std.base64 Base64Impl.decode 'new' causes GC allocation:1 2 3
std.base64 Base64Impl.decodeChar 'new' causes GC allocation:1

operator ~ may cause GC allocation:1 2

std.base64 Base64Impl.encode 'new' causes GC allocation:1
std.bigint BigInt.checkDivByZero 'new' causes GC allocation:1
std.bigint BigInt.toString 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.bigint toDecimalString.sink operator ~= may cause GC allocation:1
std.bigint toHex.sink operator ~= may cause GC allocation:1
std.bitmanip BitArray.length setting 'length' may cause GC allocation:1
std.bitmanip BitArray.toString 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

using closure causes GC allocation:1

CL2
std.bitmanip myToString operator ~ may cause GC allocation:1
std.bitmanip myToStringx operator ~ may cause GC allocation:1
std.complex Complex.toString operator ~= may cause GC allocation:1 CL3
std.concurrency List.put 'new' causes GC allocation:1
std.concurrency MessageBox.get.onLinkDeadMsg 'new' causes GC allocation:1 2
std.concurrency MessageBox.get.pty 'new' causes GC allocation:1
std.concurrency MessageBox.this 'new' causes GC allocation:1 2 3
std.concurrency _spawn 'new' causes GC allocation:1 2

indexing an associative array may cause GC allocation:1

std.concurrency checkops using closure causes GC allocation:1
std.concurrency create.wrap 'new' causes GC allocation:1

operator ~= may cause GC allocation:1

std.concurrency dispatch using closure causes GC allocation:1
std.concurrency newCondition 'new' causes GC allocation:1 2
std.concurrency onCrowdingThrow 'new' causes GC allocation:1
std.concurrency receiveOnly 'new' causes GC allocation:1
std.concurrency register indexing an associative array may cause GC allocation:1 2

operator ~= may cause GC allocation:1

std.concurrency spawn 'new' causes GC allocation:1
std.concurrency this 'new' causes GC allocation:1 CL4
std.concurrency thisTid 'new' causes GC allocation:1
std.concurrency yield 'new' causes GC allocation:1
std.container.array Array.Range.back 'new' causes GC allocation:1
std.container.array Array.Range.front 'new' causes GC allocation:1
std.container.array Array.Range.moveAt 'new' causes GC allocation:1
std.container.array Array.Range.moveBack 'new' causes GC allocation:1
std.container.array Array.Range.moveFront 'new' causes GC allocation:1
std.container.array Array.Range.opIndex 'new' causes GC allocation:1
std.container.array Array.Range.opSlice 'new' causes GC allocation:1
std.container.array Array.Range.opSliceAssign 'new' causes GC allocation:1 2
std.container.array Array.Range.opSliceOpAssign 'new' causes GC allocation:1 2
std.container.array Array.Range.opSliceUnary 'new' causes GC allocation:1 2
std.container.array Array.Range.popBack 'new' causes GC allocation:1
std.container.array Array.Range.popFront 'new' causes GC allocation:1
std.container.array Array.back 'new' causes GC allocation:1
std.container.array Array.front 'new' causes GC allocation:1
std.container.array Array.opIndex 'new' causes GC allocation:1
std.container.array Array.opSlice 'new' causes GC allocation:1
std.container.dlist DList.createNode 'new' causes GC allocation:1
std.container.dlist DList.initialize 'new' causes GC allocation:1
std.container.rbtree RBNode.dup 'new' causes GC allocation:1
std.container.rbtree RedBlackTree.allocate 'new' causes GC allocation:1
std.container.rbtree RedBlackTree.check.recurse 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

std.container.rbtree RedBlackTree.dup 'new' causes GC allocation:1
std.container.rbtree redBlackTree 'new' causes GC allocation:1 2 3 4
std.container.slist SList.initialize 'new' causes GC allocation:1
std.container.slist SList.insertFront 'new' causes GC allocation:1 2
std.container.util make.make 'new' causes GC allocation:1
std.conv convError 'new' causes GC allocation:1 2
std.conv parse 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13

indexing an associative array may cause GC allocation:1

operator ~ may cause GC allocation:1

operator ~= may cause GC allocation:1

std.conv parse.bailOut 'new' causes GC allocation:1
std.conv parseError 'new' causes GC allocation:1
std.conv parseEscape operator ~ may cause GC allocation:1
std.conv strippedOctalLiteral operator ~= may cause GC allocation:1
std.conv textImpl operator ~= may cause GC allocation:1
std.conv toImpl 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109

indexing an associative array may cause GC allocation:1

operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

std.cstream seek 'new' causes GC allocation:1
std.cstream this 'new' causes GC allocation:1 2 3
std.csv CsvReader.prime 'new' causes GC allocation:1 2

indexing an associative array may cause GC allocation:1

std.csv CsvReader.this 'new' causes GC allocation:1 2 3 4

indexing an associative array may cause GC allocation:1 2

operator ~ may cause GC allocation:1

operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.csv CsvRecord.popFront 'new' causes GC allocation:1 2
std.csv CsvRecord.prime 'new' causes GC allocation:1 2
std.csv csvNextToken 'new' causes GC allocation:1 2 3
std.csv toString operator ~ may cause GC allocation:1
std.datetime Clock.currStdTime 'new' causes GC allocation:1
std.datetime Date.dayOfYear 'new' causes GC allocation:1
std.datetime Date.fromISOExtString 'new' causes GC allocation:1 2 3 4 5 6 7 8
std.datetime Date.fromISOString 'new' causes GC allocation:1 2 3 4 5 6
std.datetime Date.fromSimpleString 'new' causes GC allocation:1 2 3 4 5 6 7
std.datetime Date.yearBC 'new' causes GC allocation:1 2
std.datetime DateTime.fromISOExtString 'new' causes GC allocation:1 2
std.datetime DateTime.fromISOString 'new' causes GC allocation:1 2
std.datetime DateTime.fromSimpleString 'new' causes GC allocation:1 2
std.datetime DosFileTimeToSysTime 'new' causes GC allocation:1 2
std.datetime Interval._enforceNotEmpty 'new' causes GC allocation:1
std.datetime Interval.begin 'new' causes GC allocation:1
std.datetime Interval.end 'new' causes GC allocation:1
std.datetime Interval.expand 'new' causes GC allocation:1 2 3 4 5 6
std.datetime Interval.intersection 'new' causes GC allocation:1 2 3
std.datetime Interval.merge 'new' causes GC allocation:1 2 3
std.datetime Interval.shift 'new' causes GC allocation:1 2
std.datetime Interval.this 'new' causes GC allocation:1 2
std.datetime IntervalRange._enforceCorrectDirection 'new' causes GC allocation:1 2
std.datetime IntervalRange._enforceNotEmpty 'new' causes GC allocation:1
std.datetime NegInfInterval.intersection 'new' causes GC allocation:1 2
std.datetime NegInfInterval.merge 'new' causes GC allocation:1
std.datetime NegInfIntervalRange._enforceCorrectDirection 'new' causes GC allocation:1
std.datetime PosInfInterval.intersection 'new' causes GC allocation:1 2
std.datetime PosInfInterval.merge 'new' causes GC allocation:1
std.datetime PosInfIntervalRange._enforceCorrectDirection 'new' causes GC allocation:1
std.datetime SysTime.fracSec 'new' causes GC allocation:1
std.datetime SysTime.fracSecs 'new' causes GC allocation:1 2
std.datetime SysTime.fromISOExtString 'new' causes GC allocation:1 2
std.datetime SysTime.fromISOString 'new' causes GC allocation:1
std.datetime SysTime.fromSimpleString 'new' causes GC allocation:1 2
std.datetime SysTime.this 'new' causes GC allocation:1 2 3
std.datetime SysTime.toISOExtString operator ~ may cause GC allocation:1 2
std.datetime SysTime.toISOString operator ~ may cause GC allocation:1 2
std.datetime SysTime.toSimpleString operator ~ may cause GC allocation:1 2
std.datetime SysTimeToDosFileTime 'new' causes GC allocation:1 2
std.datetime TimeOfDay.fromISOExtString 'new' causes GC allocation:1 2 3 4 5 6
std.datetime TimeOfDay.fromISOString 'new' causes GC allocation:1 2 3 4
std.datetime _enforceValidTZFile 'new' causes GC allocation:1
std.datetime enforceValid 'new' causes GC allocation:1 2 3 4 5
std.datetime everyDayOfWeek using closure causes GC allocation:1
std.datetime everyDuration using closure causes GC allocation:1
std.datetime expand using closure causes GC allocation:1
std.datetime fracSecsFromISOString 'new' causes GC allocation:1 2 3
std.datetime fromISOString 'new' causes GC allocation:1 2 3 4 5 6
std.datetime func using closure causes GC allocation:1
std.datetime getInstalledTZNames 'new' causes GC allocation:1 2
std.datetime getTimeZone 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

operator ~= may cause GC allocation:1

std.datetime initializeTests array literal may cause GC allocation:1 2 3

associative array literal may cause GC allocation:1

indexing an associative array may cause GC allocation:1 2 3

operator ~= may cause GC allocation:1 2 3 4 5 6

std.datetime monthFromString 'new' causes GC allocation:1
std.datetime parseRFC822DateTime 'new' causes GC allocation:1 2 3 4 5 6 7 8 9
std.datetime parseRFC822DateTime.parseTZ 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
std.datetime parseRFC822DateTime.stripAndCheckLen 'new' causes GC allocation:1
std.datetime readVal 'new' causes GC allocation:1
std.datetime testBadParse822 'new' causes GC allocation:1
std.datetime testParse822 'new' causes GC allocation:1
std.digest.digest toHexString 'new' causes GC allocation:1 string toHexString(ubyte[] data): Provide ouput range and/or RCString overload
std.encoding EncoderFunctions.WriteToString.write operator ~= may cause GC allocation:1
std.encoding EncodingScheme.create 'new' causes GC allocation:1 2

operator ~ may cause GC allocation:1 2

std.encoding EncodingScheme.register 'new' causes GC allocation:1

indexing an associative array may cause GC allocation:1

operator ~ may cause GC allocation:1

std.encoding EncodingScheme.sanitize 'new' causes GC allocation:1
std.encoding makeReadable operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
std.encoding names array literal may cause GC allocation:1 2 3 4 5 6
std.encoding sanitize 'new' causes GC allocation:1
std.encoding transcode 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.encoding transcodeReverse operator ~ may cause GC allocation:1
std.exception assertNotThrown 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.exception assertThrown 'new' causes GC allocation:1
std.exception assumeWontThrow 'new' causes GC allocation:1 2

operator ~ may cause GC allocation:1 2 3

std.exception bailOut 'new' causes GC allocation:1 2
std.exception enforceEx.enforceEx 'new' causes GC allocation:1 2
std.exception errnoEnforce 'new' causes GC allocation:1
std.exception this operator ~ may cause GC allocation:1
std.file DirEntry._ensureLStatDone operator ~ may cause GC allocation:1
std.file DirEntry._ensureStatDone operator ~ may cause GC allocation:1
std.file DirEntry.this 'new' causes GC allocation:1
std.file cenforce 'new' causes GC allocation:1
std.file deleteme operator ~ may cause GC allocation:1
std.file ensureDirExists 'new' causes GC allocation:1
std.file popFront using closure causes GC allocation:1
std.file read 'delete' requires GC:1
std.file readLink 'new' causes GC allocation:1 2

setting 'length' may cause GC allocation:1 2

std.file remove operator ~ may cause GC allocation:1
std.file rmdirRecurse 'new' causes GC allocation:1
std.format FormatSpec.fillUp 'new' causes GC allocation:1 2
std.format doFormat.formatArg.putAArray 'new' causes GC allocation:1 2 3 4

operator ~ may cause GC allocation:1

std.format doFormat.formatArg.putreal 'new' causes GC allocation:1
std.format doFormat.getFmtChar 'new' causes GC allocation:1
std.format doFormat.getFmtInt 'new' causes GC allocation:1 2
std.format doFormat.getFmtStar 'new' causes GC allocation:1 2
std.format formatNth.gencode operator ~ may cause GC allocation:1 2

operator ~= may cause GC allocation:1

std.format formatRange 'new' causes GC allocation:1
std.format getNthInt 'new' causes GC allocation:1 2
std.format primitiveTypeInfo associative array literal may cause GC allocation:1
std.format singleSpec 'new' causes GC allocation:1 2 3
std.format unformatRange indexing an associative array may cause GC allocation:1

operator ~= may cause GC allocation:1

std.functional memoize.memoize indexing an associative array may cause GC allocation:1
std.functional partial.partial.errormsg operator ~= may cause GC allocation:1 2
std.getopt getoptImpl 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

operator ~= may cause GC allocation:1 2

std.getopt handleOption operator ~ may cause GC allocation:1 2 3 4

operator ~= may cause GC allocation:1 2 3 4

std.getopt handleOption.setHash indexing an associative array may cause GC allocation:1
std.getopt splitAndGet operator ~ may cause GC allocation:1 2 3
std.internal.math.biguintcore **** array literal may cause GC allocation:1
std.internal.math.biguintcore BigUint.div 'new' causes GC allocation:1

array literal may cause GC allocation:1

std.internal.math.biguintcore BigUint.divInt 'new' causes GC allocation:1
std.internal.math.biguintcore BigUint.fromDecimalString 'new' causes GC allocation:1

array literal may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.internal.math.biguintcore BigUint.fromHexString 'new' causes GC allocation:1

array literal may cause GC allocation:1

std.internal.math.biguintcore BigUint.mod 'new' causes GC allocation:1 2

array literal may cause GC allocation:1

std.internal.math.biguintcore BigUint.modInt 'delete' requires GC:1

'new' causes GC allocation:1

std.internal.math.biguintcore BigUint.mul 'new' causes GC allocation:1

array literal may cause GC allocation:1

std.internal.math.biguintcore BigUint.opAssign array literal may cause GC allocation:1 2 3 4 5 6
std.internal.math.biguintcore BigUint.opShl 'new' causes GC allocation:1
std.internal.math.biguintcore BigUint.pow 'new' causes GC allocation:1 2

array literal may cause GC allocation:1

std.internal.math.biguintcore BigUint.toDecimalString 'new' causes GC allocation:1
std.internal.math.biguintcore BigUint.toHexString 'new' causes GC allocation:1
std.internal.math.biguintcore add 'new' causes GC allocation:1
std.internal.math.biguintcore addInt 'new' causes GC allocation:1
std.internal.math.biguintcore biguintFromDecimal 'new' causes GC allocation:1
std.internal.math.biguintcore biguintToDecimal setting 'length' may cause GC allocation:1
std.internal.math.biguintcore blockDivMod 'delete' requires GC:1

'new' causes GC allocation:1

std.internal.math.biguintcore divModInternal 'delete' requires GC:1 2

'new' causes GC allocation:1 2

std.internal.math.biguintcore includeSign 'new' causes GC allocation:1
std.internal.math.biguintcore mulInternal 'delete' requires GC:1 2

'new' causes GC allocation:1 2

std.internal.math.biguintcore squareInternal 'delete' requires GC:1

'new' causes GC allocation:1

std.internal.math.biguintcore sub 'new' causes GC allocation:1 2
std.internal.math.biguintcore subInt 'new' causes GC allocation:1
std.json JSONValue.assign 'new' causes GC allocation:1

indexing an associative array may cause GC allocation:1

std.json JSONValue.opBinary operator ~= may cause GC allocation:1
std.json JSONValue.opIndex operator ~ may cause GC allocation:1
std.json JSONValue.opIndexAssign indexing an associative array may cause GC allocation:1
std.json JSONValue.opOpAssign operator ~= may cause GC allocation:1
std.json parseJSON.error 'new' causes GC allocation:1
std.json parseJSON.parseValue indexing an associative array may cause GC allocation:1

operator ~= may cause GC allocation:1

std.json toJSON.toString 'new' causes GC allocation:1
std.json toJSON.toValue.emit indexing an associative array may cause GC allocation:1
std.mmfile MmFile.this operator ~ may cause GC allocation:1 2 3
std.net.curl **** using closure causes GC allocation:1
std.net.curl AsyncChunkInputRange.this 'new' causes GC allocation:1
std.net.curl AsyncLineInputRange.this 'new' causes GC allocation:1
std.net.curl Curl.clearIfSupported using closure causes GC allocation:1
std.net.curl Curl.onReceive using closure causes GC allocation:1
std.net.curl Curl.onReceiveHeader using closure causes GC allocation:1
std.net.curl Curl.onSeek using closure causes GC allocation:1
std.net.curl Curl.onSend using closure causes GC allocation:1
std.net.curl Curl.onSocketOption using closure causes GC allocation:1
std.net.curl FTP.url operator ~ may cause GC allocation:1
std.net.curl HTTP.Impl.onReceiveHeader indexing an associative array may cause GC allocation:1
std.net.curl HTTP.url operator ~ may cause GC allocation:1
std.net.curl Pool.push 'new' causes GC allocation:1
std.net.curl WorkerThreadProtocol.wait using closure causes GC allocation:1 CL3
std.net.curl _basicFTP operator ~= may cause GC allocation:1
std.net.curl _basicHTTP indexing an associative array may cause GC allocation:1

operator ~= may cause GC allocation:1 2 3

using closure causes GC allocation:1

std.net.curl _finalizeAsyncChunks setting 'length' may cause GC allocation:1

using closure causes GC allocation:1

CL3
std.net.curl _getForRange using closure causes GC allocation:1 CL3
std.net.curl _receiveAsyncLines operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

using closure causes GC allocation:1

std.net.curl _spawnAsync 'new' causes GC allocation:1 2

setting 'length' may cause GC allocation:1

std.net.curl byLine.SyncLineInputRange.popFront array literal may cause GC allocation:1 2
std.net.curl decodeLineInto operator ~= may cause GC allocation:1 2

setting 'length' may cause GC allocation:1 2

using closure causes GC allocation:1

CL5
std.net.curl decodeString operator ~= may cause GC allocation:1
std.net.curl del operator ~ may cause GC allocation:1

using closure causes GC allocation:1

std.net.curl download 'new' causes GC allocation:1

using closure causes GC allocation:1

std.net.curl dup using closure causes GC allocation:1 CL5
std.net.curl push using closure causes GC allocation:1 CL5
std.net.curl upload 'new' causes GC allocation:1
std.net.isemail isEmail 'new' causes GC allocation:1 2 3 4

array literal may cause GC allocation:1 2 3 4

associative array literal may cause GC allocation:1 2

indexing an associative array may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

operator ~ may cause GC allocation:1 2 3 4 5 6 7 8

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

std.net.isemail substr using closure causes GC allocation:1
std.numeric Fft.this 'new' causes GC allocation:1
std.outbuffer OutBuffer.reserve setting 'length' may cause GC allocation:1
std.parallelism RoundRobinBuffer.this setting 'length' may cause GC allocation:1 2
std.parallelism Task.executeInNewThread 'new' causes GC allocation:1 2
std.parallelism TaskPool.WorkerLocalStorage.initialize 'new' causes GC allocation:1
std.parallelism TaskPool.abstractPutGroupNoSync 'new' causes GC allocation:1
std.parallelism TaskPool.abstractPutNoSync 'new' causes GC allocation:1
std.parallelism TaskPool.asyncBuf.AsyncBuf.this setting 'length' may cause GC allocation:1 2
std.parallelism TaskPool.asyncBuf.popFront 'new' causes GC allocation:1
std.parallelism TaskPool.map.map.Map.dumpToFrom setting 'length' may cause GC allocation:1
std.parallelism TaskPool.map.map.Map.this setting 'length' may cause GC allocation:1 2 3
std.parallelism TaskPool.map.map.popFront 'new' causes GC allocation:1
std.parallelism TaskPool.parallel using closure causes GC allocation:1
std.parallelism TaskPool.popFront using closure causes GC allocation:1
std.parallelism TaskPool.reduce.reduce.reduceOnRange 'new' causes GC allocation:1
std.parallelism TaskPool.this 'new' causes GC allocation:1 2 3 4 5 6 7
std.parallelism foreachErr 'new' causes GC allocation:1
std.parallelism submitAndExecute 'new' causes GC allocation:1
std.parallelism task 'new' causes GC allocation:1 2 3
std.parallelism taskPool 'new' causes GC allocation:1
std.path absolutePath 'new' causes GC allocation:1
std.path buildNormalizedPath 'new' causes GC allocation:1 2
std.path buildPath 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.path defaultExtension operator ~ may cause GC allocation:1 2
std.path expandTilde.combineCPathWithDPath operator ~= may cause GC allocation:1
std.path expandTilde.expandFromDatabase operator ~ may cause GC allocation:1 2
std.path globMatch operator ~ may cause GC allocation:1
std.path relativePath 'new' causes GC allocation:1

operator ~= may cause GC allocation:1 2 3 4

std.path setExtension operator ~ may cause GC allocation:1 2 3

operator ~= may cause GC allocation:1 2 3

std.process Pid.performWait 'new' causes GC allocation:1
std.process ProcessPipes.stderr 'new' causes GC allocation:1
std.process ProcessPipes.stdin 'new' causes GC allocation:1
std.process ProcessPipes.stdout 'new' causes GC allocation:1
std.process TestScript.this operator ~ may cause GC allocation:1 2
std.process _spawnvp 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.process charAllocator 'new' causes GC allocation:1
std.process createEnv 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.process environment.opIndex operator ~ may cause GC allocation:1
std.process environment.opIndexAssign operator ~ may cause GC allocation:1
std.process environment.toAA indexing an associative array may cause GC allocation:1
std.process escapeShellArguments.allocator 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.process escapeWindowsShellCommand 'new' causes GC allocation:1 2
std.process execvpe_ operator ~ may cause GC allocation:1
std.process newFromErrno 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.process pipe 'new' causes GC allocation:1 2 3
std.process pipeProcessImpl 'new' causes GC allocation:1 2
std.process shell operator ~= may cause GC allocation:1
std.process spawnProcessImpl 'new' causes GC allocation:1 2 3 4 5 6

operator ~ may cause GC allocation:1

std.process uniqueTempPath operator ~ may cause GC allocation:1
std.random MersenneTwisterEngine.seed 'new' causes GC allocation:1
std.random RandomCover.this setting 'length' may cause GC allocation:1 2
std.random uniformDistribution setting 'length' may cause GC allocation:1
std.range.constraints put array literal may cause GC allocation:1
std.range.constraints putChar array literal may cause GC allocation:1
std.range.interfaces InputRangeObject.save 'new' causes GC allocation:1
std.range.interfaces inputRangeObject 'new' causes GC allocation:1
std.range.interfaces outputRangeObject.outputRangeObject 'new' causes GC allocation:1
std.range.interfaces putMethods operator ~ may cause GC allocation:1 2

operator ~= may cause GC allocation:1 2

std.range.package OnlyResult.opIndex 'new' causes GC allocation:1 2 3
std.range.package OnlyResult.opSlice 'new' causes GC allocation:1 2 3
std.range.package Zip.tryGetInit 'new' causes GC allocation:1
std.range.package lockstepMixin operator ~= may cause GC allocation:1 2 3 4 5 6
std.range.package opSlice 'new' causes GC allocation:1
std.range.package roundRobin.Result.front.makeSwitch operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10

std.range.package roundRobin.Result.popFront.makeSwitchIncrementCounter operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10

std.range.package roundRobin.Result.popFront.makeSwitchPopFront operator ~ may cause GC allocation:1 2 3 4 5 6 7 8 9 10

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9

std.range.package takeNone 'new' causes GC allocation:1 2 3
std.regex.internal.ir disassemble operator ~ may cause GC allocation:1 2
std.regex.internal.ir getTrie indexing an associative array may cause GC allocation:1
std.regex.internal.kickstart ShiftOr.fetch setting 'length' may cause GC allocation:1
std.regex.internal.kickstart ShiftOr.this 'new' causes GC allocation:1

operator ~= may cause GC allocation:1 2 3 4 5

std.regex.internal.parser Parser.charsetToIr operator ~= may cause GC allocation:1 2 3
std.regex.internal.parser Parser.error 'new' causes GC allocation:1
std.regex.internal.parser Parser.markBackref setting 'length' may cause GC allocation:1
std.regex.internal.parser Parser.parseFlags 'new' causes GC allocation:1 2
std.regex.internal.parser Parser.parseQuantifier operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1 2

std.regex.internal.parser Parser.parseRegex operator ~= may cause GC allocation:1 2
std.regex.internal.parser Parser.put operator ~= may cause GC allocation:1
std.regex.internal.parser Parser.putRaw operator ~= may cause GC allocation:1
std.regex.internal.parser Stack.push operator ~= may cause GC allocation:1
std.regex.internal.parser getTrie indexing an associative array may cause GC allocation:1
std.regex.internal.parser lightPostprocess 'new' causes GC allocation:1 2
std.regex.internal.parser parseUniHex 'new' causes GC allocation:1
std.regex.internal.parser reverseBytecode 'new' causes GC allocation:1
std.regex.package Captures.newMatches 'new' causes GC allocation:1
std.socket Address.toHostString 'new' causes GC allocation:1 2 3

operator ~ may cause GC allocation:1 2

std.socket Address.toServiceString 'new' causes GC allocation:1 2 3

operator ~ may cause GC allocation:1 2

std.socket Address.toString operator ~ may cause GC allocation:1 2
std.socket InternetHost.populate 'new' causes GC allocation:1 2
std.socket InternetHost.validHostent 'new' causes GC allocation:1
std.socket Protocol.populate 'new' causes GC allocation:1
std.socket Service.populate 'new' causes GC allocation:1
std.socket Socket.accept 'new' causes GC allocation:1
std.socket Socket.accepting 'new' causes GC allocation:1
std.socket Socket.bind 'new' causes GC allocation:1
std.socket Socket.blocking 'new' causes GC allocation:1
std.socket Socket.connect 'new' causes GC allocation:1
std.socket Socket.createAddress 'new' causes GC allocation:1 2 3
std.socket Socket.getOption 'new' causes GC allocation:1 2

operator ~ may cause GC allocation:1

std.socket Socket.hostName 'new' causes GC allocation:1
std.socket Socket.listen 'new' causes GC allocation:1
std.socket Socket.localAddress 'new' causes GC allocation:1 2
std.socket Socket.remoteAddress 'new' causes GC allocation:1 2
std.socket Socket.select 'new' causes GC allocation:1
std.socket Socket.setOption 'new' causes GC allocation:1 2 3

operator ~ may cause GC allocation:1

std.socket Socket.this 'new' causes GC allocation:1 2
std.socket SocketSet.add setting 'length' may cause GC allocation:1 2
std.socket SocketSet.resize setting 'length' may cause GC allocation:1
std.socket SocketSet.setMinCapacity setting 'length' may cause GC allocation:1
std.socket getAddress 'new' causes GC allocation:1 2 3

operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.socket getAddressInfoImpl 'new' causes GC allocation:1 2 3
std.socket parse 'new' causes GC allocation:1
std.socket parseAddress 'new' causes GC allocation:1 2
std.socket serviceToPort 'new' causes GC allocation:1
std.socket socketPair 'new' causes GC allocation:1
std.socket socketPair.toSocket 'new' causes GC allocation:1
std.socket this 'new' causes GC allocation:1 2 3

operator ~ may cause GC allocation:1

std.socket toHostNameString 'new' causes GC allocation:1
std.socketstream seek 'new' causes GC allocation:1
std.stdio ChunksImpl.opApply 'new' causes GC allocation:1 2

setting 'length' may cause GC allocation:1

std.stdio File.ByChunk.front 'new' causes GC allocation:1
std.stdio File.ByChunk.popFront 'new' causes GC allocation:1
std.stdio File.ByChunk.this 'new' causes GC allocation:1
std.stdio File.close operator ~ may cause GC allocation:1 2
std.stdio File.lock operator ~ may cause GC allocation:1
std.stdio File.popen operator ~ may cause GC allocation:1
std.stdio File.readln operator ~= may cause GC allocation:1 2 3

setting 'length' may cause GC allocation:1

std.stdio File.seek operator ~ may cause GC allocation:1
std.stdio File.setvbuf operator ~ may cause GC allocation:1 2
std.stdio File.tell operator ~ may cause GC allocation:1
std.stdio File.tryLock operator ~ may cause GC allocation:1
std.stdio File.unlock operator ~ may cause GC allocation:1
std.stdio LockingTextReader.front 'new' causes GC allocation:1
std.stdio LockingTextReader.popFront 'new' causes GC allocation:1
std.stdio lines.opApplyRaw 'new' causes GC allocation:1

operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.stdio opCall 'new' causes GC allocation:1 2
std.stdio openNetwork 'new' causes GC allocation:1 2 3

operator ~ may cause GC allocation:1

std.stdio readlnImpl operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1 2 3

std.stdio this operator ~ may cause GC allocation:1
std.stream Stream.assertReadable 'new' causes GC allocation:1
std.stream Stream.assertSeekable 'new' causes GC allocation:1
std.stream Stream.assertWriteable 'new' causes GC allocation:1
std.stream Stream.flush setting 'length' may cause GC allocation:1
std.stream Stream.getc setting 'length' may cause GC allocation:1
std.stream Stream.getcw 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.stream Stream.readExact 'new' causes GC allocation:1
std.stream Stream.readLine operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1 2

std.stream Stream.readLineW operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1 2

std.stream Stream.readString 'new' causes GC allocation:1
std.stream Stream.readStringW 'new' causes GC allocation:1
std.stream Stream.toString 'new' causes GC allocation:1 2

setting 'length' may cause GC allocation:1

std.stream Stream.ungetc operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.stream Stream.ungetcw operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.stream Stream.vreadf operator ~= may cause GC allocation:1 2
std.stream Stream.writeExact 'new' causes GC allocation:1
std.stream TreadLine.readLine operator ~= may cause GC allocation:1
std.stream close 'delete' requires GC:1
std.stream data 'new' causes GC allocation:1
std.stream flush 'new' causes GC allocation:1
std.stream getcw 'new' causes GC allocation:1

setting 'length' may cause GC allocation:1

std.stream open 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.stream readStringW 'new' causes GC allocation:1
std.stream reserve setting 'length' may cause GC allocation:1
std.stream seek 'new' causes GC allocation:1
std.stream this 'new' causes GC allocation:1 2 3 4
std.string abbrev indexing an associative array may cause GC allocation:1 2
std.string center 'new' causes GC allocation:1 2
std.string detab setting 'length' may cause GC allocation:1 2 3
std.string entab setting 'length' may cause GC allocation:1 2
std.string entab.change setting 'length' may cause GC allocation:1 2
std.string format 'new' causes GC allocation:1

using closure causes GC allocation:1

CL6
std.string leftJustify 'new' causes GC allocation:1 2
std.string makeTrans 'new' causes GC allocation:1
std.string outdent 'new' causes GC allocation:1
std.string rightJustify 'new' causes GC allocation:1 2
std.string sformat 'new' causes GC allocation:1
std.string soundex 'new' causes GC allocation:1
std.string succ 'new' causes GC allocation:1
std.string toStringz 'new' causes GC allocation:1
std.string translate 'new' causes GC allocation:1
std.string translateImpl indexing an associative array may cause GC allocation:1
std.string wrap operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9

setting 'length' may cause GC allocation:1 2

std.syserror SysError.msg 'new' causes GC allocation:1
std.traits demangleFunctionAttributes associative array literal may cause GC allocation:1

indexing an associative array may cause GC allocation:1

std.traits extractAttribFlags operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
std.traits fqnType.parametersTypeString array literal may cause GC allocation:1 2

operator ~= may cause GC allocation:1

std.traits fun associative array literal may cause GC allocation:1
std.typecons Unique.this 'delete' requires GC:1
std.typecons alignForSize operator ~ may cause GC allocation:1 2 3 4 5 6 7

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8

std.typecons generateDoNothing operator ~ may cause GC allocation:1 2

operator ~= may cause GC allocation:1 2 3

std.typecons this operator ~ may cause GC allocation:1
std.typecons wrap.wrap.Impl.generateFun.mod operator ~= may cause GC allocation:1 2 3
std.typecons wrap.wrap.Impl.generateFun.stc operator ~= may cause GC allocation:1 2 3 4 5 6
std.typecons wrap.wrap.wrap 'new' causes GC allocation:1
std.uni GcPolicy.alloc 'new' causes GC allocation:1
std.uni GcPolicy.append operator ~= may cause GC allocation:1
std.uni GcPolicy.realloc setting 'length' may cause GC allocation:1
std.uni InversionList.dropUpTo array literal may cause GC allocation:1
std.uni InversionList.inverted array literal may cause GC allocation:1 2
std.uni InversionList.skipUpTo array literal may cause GC allocation:1
std.uni InversionList.this operator ~= may cause GC allocation:1 2
std.uni MultiArray.length.length setting 'length' may cause GC allocation:1 2
std.uni MultiArray.this 'new' causes GC allocation:1
std.uni SetSearcher.opCall 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.uni Utf16Matcher.badEncoding 'new' causes GC allocation:1
std.uni Utf8Matcher.DefMatcher.genDispatch operator ~= may cause GC allocation:1 2 3
std.uni Utf8Matcher.badEncoding 'new' causes GC allocation:1
std.uni compressTo operator ~= may cause GC allocation:1 2 3 4 5 6
std.uni encodeTo 'new' causes GC allocation:1
std.uni genUnrolledSwitchSearch operator ~= may cause GC allocation:1 2 3
std.uni isPrettyPropertyName array literal may cause GC allocation:1
std.uni normalize operator ~= may cause GC allocation:1 2

setting 'length' may cause GC allocation:1 2 3

std.uni testAll using closure causes GC allocation:1
std.uni toCaseInPlaceAlloc.toCaseInPlaceAlloc 'new' causes GC allocation:1
std.uni unicode.loadAny 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.uri URI_Decode 'new' causes GC allocation:1 2 3 4 5 6 7 8 9 10 11
std.uri URI_Encode 'new' causes GC allocation:1 2 3 4 5
std.uri this operator ~ may cause GC allocation:1
std.utf RefBidirCU.save 'new' causes GC allocation:1
std.utf RefRandomCU.opSlice 'new' causes GC allocation:1
std.utf RefRandomCU.save 'new' causes GC allocation:1
std.utf decodeImpl 'new' causes GC allocation:1 2
std.utf decodeImpl.exception 'new' causes GC allocation:1 2 3
std.utf decodeImpl.invalidUTF 'new' causes GC allocation:1
std.utf decodeImpl.outOfBounds 'new' causes GC allocation:1
std.utf encode 'new' causes GC allocation:1 2 3 4 5 6 7 8 9

operator ~= may cause GC allocation:1 2 3 4 5

std.utf strideBack 'new' causes GC allocation:1 2
std.utf strideImpl 'new' causes GC allocation:1
std.utf testBadDecode 'new' causes GC allocation:1 2
std.utf testDecode 'new' causes GC allocation:1 2 3
std.utf testDecodeFront 'new' causes GC allocation:1 2 3
std.utf this operator ~ may cause GC allocation:1
std.utf toString operator ~= may cause GC allocation:1 2 3
std.utf toUCSindex 'new' causes GC allocation:1 2
std.utf toUTF16 operator ~= may cause GC allocation:1

setting 'length' may cause GC allocation:1 2 3 4

std.utf toUTF32 setting 'length' may cause GC allocation:1 2
std.utf toUTF8 setting 'length' may cause GC allocation:1 2 3 4
std.utf toUTFzImpl array literal may cause GC allocation:1

operator ~= may cause GC allocation:1

std.uuid UUID.this 'new' causes GC allocation:1 2 3 4 5
std.uuid parseUUID.parserError 'new' causes GC allocation:1 2 3
std.variant VariantN.get 'new' causes GC allocation:1 2
std.variant VariantN.handler 'new' causes GC allocation:1
std.variant VariantN.handler.tryPutting 'new' causes GC allocation:1 2 3 4 5 6

array literal may cause GC allocation:1 2 3 4 5 6 7 8 9 10

indexing an associative array may cause GC allocation:1 2

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9 10 11

std.variant VariantN.opArithmetic 'new' causes GC allocation:1
std.variant VariantN.opAssign 'new' causes GC allocation:1
std.variant VariantN.opCmp 'new' causes GC allocation:1
std.variant this operator ~ may cause GC allocation:1
std.variant variantArray operator ~= may cause GC allocation:1
std.variant visitImpl.visitGetOverloadMap 'new' causes GC allocation:1
std.xml Check.fail 'new' causes GC allocation:1 2 3
std.xml ElementParser.parse 'new' causes GC allocation:1 2 3 4 5 6 7

indexing an associative array may cause GC allocation:1 2 3 4

std.xml Item.pretty array literal may cause GC allocation:1
std.xml Tag.this 'new' causes GC allocation:1 2

indexing an associative array may cause GC allocation:1

operator ~ may cause GC allocation:1 2

setting 'length' may cause GC allocation:1 2

std.xml Tag.toEmptyString operator ~ may cause GC allocation:1
std.xml Tag.toEndString operator ~ may cause GC allocation:1
std.xml Tag.toNonEndString operator ~ may cause GC allocation:1

operator ~= may cause GC allocation:1

std.xml Tag.toStartString operator ~ may cause GC allocation:1
std.xml appendItem operator ~= may cause GC allocation:1
std.xml assertNot 'new' causes GC allocation:1

using closure causes GC allocation:1

CL6
std.xml check 'new' causes GC allocation:1
std.xml checkAttValue operator ~ may cause GC allocation:1
std.xml checkElement operator ~ may cause GC allocation:1
std.xml checkEnd 'new' causes GC allocation:1

operator ~ may cause GC allocation:1

std.xml checkLiteral operator ~ may cause GC allocation:1
std.xml decode 'new' causes GC allocation:1 2

operator ~= may cause GC allocation:1 2 3 4 5 6 7 8 9

std.xml exit 'new' causes GC allocation:1
std.xml opCatAssign operator ~= may cause GC allocation:1 2 3 4 5
std.xml parse 'new' causes GC allocation:1 2 3 4 5

indexing an associative array may cause GC allocation:1

std.xml pretty array literal may cause GC allocation:1 2 3

operator ~ may cause GC allocation:1

operator ~= may cause GC allocation:1 2

std.xml reqc 'new' causes GC allocation:1
std.xml startOf operator ~= may cause GC allocation:1 2
std.xml text 'new' causes GC allocation:1

operator ~= may cause GC allocation:1

std.xml this 'new' causes GC allocation:1 2 3 4 5 6 7

indexing an associative array may cause GC allocation:1

operator ~ may cause GC allocation:1

std.xml toString operator ~ may cause GC allocation:1 2 3 4 5 6 7 8

operator ~= may cause GC allocation:1 2 3 4

std.xml toType 'new' causes GC allocation:1
std.zip ArchiveMember.compressionMethod 'new' causes GC allocation:1
std.zip ArchiveMember.expandedData setting 'length' may cause GC allocation:1
std.zip ZipArchive.addMember indexing an associative array may cause GC allocation:1
std.zip ZipArchive.build 'new' causes GC allocation:1 2 3
std.zip ZipArchive.expand 'new' causes GC allocation:1 2 3 4
std.zip ZipArchive.this 'new' causes GC allocation:1 2 3 4 5 6 7 8

indexing an associative array may cause GC allocation:1

std.zip this operator ~ may cause GC allocation:1
std.zlib Compress.compress 'delete' requires GC:1

'new' causes GC allocation:1

operator ~ may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.zlib Compress.error 'new' causes GC allocation:1
std.zlib Compress.flush 'delete' requires GC:1

operator ~= may cause GC allocation:1 2

std.zlib UnCompress.error 'new' causes GC allocation:1
std.zlib UnCompress.flush 'delete' requires GC:1

'new' causes GC allocation:1

operator ~ may cause GC allocation:1

operator ~= may cause GC allocation:1

std.zlib UnCompress.uncompress 'delete' requires GC:1

'new' causes GC allocation:1

operator ~ may cause GC allocation:1

setting 'length' may cause GC allocation:1

std.zlib compress 'delete' requires GC:1

'new' causes GC allocation:1 2

setting 'length' may cause GC allocation:1

std.zlib uncompress 'new' causes GC allocation:1 2 3

setting 'length' may cause GC allocation:1 2