PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 131
// errorcheck -0 -m -l // Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test escape analysis for function parameters. // In this test almost everything is BAD except the simplest cases // where input directly flows to output. package escape func zero() int { return 0 } var sink interface{} // in -> out func param0(p *int) *int { // ERROR "leaking param: p to result ~r0" return p } func caller0a() { i := 0 _ = param0(&i) } func caller0b() { i := 0 // ERROR "moved to heap: i$" sink = param0(&i) } // in, in -> out, out func param1(p1, p2 *int) (*int, *int) { // ERROR "leaking param: p1 to result ~r0" "leaking param: p2 to result ~r1" return p1, p2 } func caller1() { i := 0 // ERROR "moved to heap: i$" j := 0 sink, _ = param1(&i, &j) } // in -> other in func param2(p1 *int, p2 **int) { // ERROR "leaking param: p1$" "p2 does not escape$" *p2 = p1 } func caller2a() { i := 0 // ERROR "moved to heap: i$" var p *int param2(&i, &p) _ = p } func caller2b() { i := 0 // ERROR "moved to heap: i$" var p *int param2(&i, &p) sink = p } func paramArraySelfAssign(p *PairOfPairs) { // ERROR "p does not escape" p.pairs[0] = p.pairs[1] // ERROR "ignoring self-assignment in p.pairs\[0\] = p.pairs\[1\]" } func paramArraySelfAssignUnsafeIndex(p *PairOfPairs) { // ERROR "leaking param content: p" // Function call inside index disables self-assignment case to trigger. p.pairs[zero()] = p.pairs[1] p.pairs[zero()+1] = p.pairs[1] } type PairOfPairs struct { pairs [2]*Pair } type BoxedPair struct { pair *Pair } type WrappedPair struct { pair Pair } func leakParam(x interface{}) { // ERROR "leaking param: x" sink = x } func sinkAfterSelfAssignment1(box *BoxedPair) { // ERROR "leaking param content: box" box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2" sink = box.pair.p2 } func sinkAfterSelfAssignment2(box *BoxedPair) { // ERROR "leaking param content: box" box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2" sink = box.pair } func sinkAfterSelfAssignment3(box *BoxedPair) { // ERROR "leaking param content: box" box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2" leakParam(box.pair.p2) } func sinkAfterSelfAssignment4(box *BoxedPair) { // ERROR "leaking param content: box" box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2" leakParam(box.pair) } func selfAssignmentAndUnrelated(box1, box2 *BoxedPair) { // ERROR "leaking param content: box2" "box1 does not escape" box1.pair.p1 = box1.pair.p2 // ERROR "ignoring self-assignment in box1.pair.p1 = box1.pair.p2" leakParam(box2.pair.p2) } func notSelfAssignment1(box1, box2 *BoxedPair) { // ERROR "leaking param content: box2" "box1 does not escape" box1.pair.p1 = box2.pair.p1 } func notSelfAssignment2(p1, p2 *PairOfPairs) { // ERROR "leaking param content: p2" "p1 does not escape" p1.pairs[0] = p2.pairs[1] } func notSelfAssignment3(p1, p2 *PairOfPairs) { // ERROR "leaking param content: p2" "p1 does not escape" p1.pairs[0].p1 = p2.pairs[1].p1 } func boxedPairSelfAssign(box *BoxedPair) { // ERROR "box does not escape" box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2" } func wrappedPairSelfAssign(w *WrappedPair) { // ERROR "w does not escape" w.pair.p1 = w.pair.p2 // ERROR "ignoring self-assignment in w.pair.p1 = w.pair.p2" } // in -> in type Pair struct { p1 *int p2 *int } func param3(p *Pair) { // ERROR "p does not escape" p.p1 = p.p2 // ERROR "param3 ignoring self-assignment in p.p1 = p.p2" } func caller3a() { i := 0 j := 0 p := Pair{&i, &j} param3(&p) _ = p } func caller3b() { i := 0 // ERROR "moved to heap: i$" j := 0 // ERROR "moved to heap: j$" p := Pair{&i, &j} param3(&p) sink = p // ERROR "p escapes to heap$" } // in -> rcvr func (p *Pair) param4(i *int) { // ERROR "p does not escape$" "leaking param: i$" p.p1 = i } func caller4a() { i := 0 // ERROR "moved to heap: i$" p := Pair{} p.param4(&i) _ = p } func caller4b() { i := 0 // ERROR "moved to heap: i$" p := Pair{} p.param4(&i) sink = p // ERROR "p escapes to heap$" } // in -> heap func param5(i *int) { // ERROR "leaking param: i$" sink = i } func caller5() { i := 0 // ERROR "moved to heap: i$" param5(&i) } // *in -> heap func param6(i ***int) { // ERROR "leaking param content: i$" sink = *i } func caller6a() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" p2 := &p param6(&p2) } // **in -> heap func param7(i ***int) { // ERROR "leaking param content: i$" sink = **i } func caller7() { i := 0 // ERROR "moved to heap: i$" p := &i p2 := &p param7(&p2) } // **in -> heap func param8(i **int) { // ERROR "i does not escape$" sink = **i // ERROR "\*\(\*i\) escapes to heap" } func caller8() { i := 0 p := &i param8(&p) } // *in -> out func param9(p ***int) **int { // ERROR "leaking param: p to result ~r0 level=1" return *p } func caller9a() { i := 0 p := &i p2 := &p _ = param9(&p2) } func caller9b() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" p2 := &p sink = param9(&p2) } // **in -> out func param10(p ***int) *int { // ERROR "leaking param: p to result ~r0 level=2" return **p } func caller10a() { i := 0 p := &i p2 := &p _ = param10(&p2) } func caller10b() { i := 0 // ERROR "moved to heap: i$" p := &i p2 := &p sink = param10(&p2) } // in escapes to heap (address of param taken and returned) func param11(i **int) ***int { // ERROR "moved to heap: i$" return &i } func caller11a() { i := 0 // ERROR "moved to heap: i" p := &i // ERROR "moved to heap: p" _ = param11(&p) } func caller11b() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" sink = param11(&p) } func caller11c() { // GOOD i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p" sink = *param11(&p) } func caller11d() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p" p2 := &p sink = param11(p2) } // &in -> rcvr type Indir struct { p ***int } func (r *Indir) param12(i **int) { // ERROR "r does not escape$" "moved to heap: i$" r.p = &i } func caller12a() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" var r Indir r.param12(&p) _ = r } func caller12b() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" r := &Indir{} // ERROR "&Indir{} does not escape$" r.param12(&p) _ = r } func caller12c() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" r := Indir{} r.param12(&p) sink = r } func caller12d() { i := 0 // ERROR "moved to heap: i$" p := &i // ERROR "moved to heap: p$" r := Indir{} r.param12(&p) sink = **r.p } // in -> value rcvr type Val struct { p **int } func (v Val) param13(i *int) { // ERROR "v does not escape$" "leaking param: i$" *v.p = i } func caller13a() { i := 0 // ERROR "moved to heap: i$" var p *int var v Val v.p = &p v.param13(&i) _ = v } func caller13b() { i := 0 // ERROR "moved to heap: i$" var p *int v := Val{&p} v.param13(&i) _ = v } func caller13c() { i := 0 // ERROR "moved to heap: i$" var p *int v := &Val{&p} // ERROR "&Val{...} does not escape$" v.param13(&i) _ = v } func caller13d() { i := 0 // ERROR "moved to heap: i$" var p *int // ERROR "moved to heap: p$" var v Val v.p = &p v.param13(&i) sink = v } func caller13e() { i := 0 // ERROR "moved to heap: i$" var p *int // ERROR "moved to heap: p$" v := Val{&p} v.param13(&i) sink = v } func caller13f() { i := 0 // ERROR "moved to heap: i$" var p *int // ERROR "moved to heap: p$" v := &Val{&p} // ERROR "&Val{...} escapes to heap$" v.param13(&i) sink = v } func caller13g() { i := 0 // ERROR "moved to heap: i$" var p *int v := Val{&p} v.param13(&i) sink = *v.p } func caller13h() { i := 0 // ERROR "moved to heap: i$" var p *int v := &Val{&p} // ERROR "&Val{...} does not escape$" v.param13(&i) sink = **v.p // ERROR "\*\(\*v\.p\) escapes to heap" } type Node struct { p *Node } var Sink *Node func f(x *Node) { // ERROR "leaking param content: x" Sink = &Node{x.p} // ERROR "&Node{...} escapes to heap" } func g(x *Node) *Node { // ERROR "leaking param content: x" return &Node{x.p} // ERROR "&Node{...} escapes to heap" } func h(x *Node) { // ERROR "leaking param: x" y := &Node{x} // ERROR "&Node{...} does not escape" Sink = g(y) f(y) } // interface(in) -> out // See also issue 29353. // Convert to a non-direct interface, require an allocation and // copy x to heap (not to result). func param14a(x [4]*int) interface{} { // ERROR "leaking param: x$" return x // ERROR "x escapes to heap" } // Convert to a direct interface, does not need an allocation. // So x only leaks to result. func param14b(x *int) interface{} { // ERROR "leaking param: x to result ~r0 level=0" return x }