java/1464: Failure to compile try/finally?

gback@cs.utah.edu gback@cs.utah.edu
Wed Dec 20 12:28:00 GMT 2000


>Number:         1464
>Category:       java
>Synopsis:       Failure to compile try/finally?
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    apbianco
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 20 12:20:18 PST 2000
>Closed-Date:    Tue Mar 07 14:17:48 PST 2000
>Last-Modified:  Tue Mar  7 14:20:00 PST 2000
>Originator:     Godmar Back
>Release:        CVS October
>Organization:
>Environment:
Linux
>Description:
An old problem I've mentioned in April still hasn't been
fixed.

The following program produces incorrect results when
compiled from the java source.
It works when compiled from a .class file generated by
say jikes.
Sun's JDK executes the .class file generated by gcj -C.
gcj cannot compile the .class file it generates with -C.

>How-To-Repeat:
/*
 * test that caught null pointers exceptions in finalizers work correctly
 * and that local variables are accessible in null pointer exception handlers.
 */
import java.io.*;

public class NullPointerTest {

    static String s;

    public static void main(String[] args) {
         System.out.println(tryfinally() + s);
    }

    public static String tryfinally() {
       String yuck = null;
       String local_s = null;

       try {
           return "This is ";
       } finally {
           try {
        local_s = "Perfect";
        /* trigger null pointer exception */
        String x = yuck.toLowerCase();
           } catch (Exception _) {
        /* 
         * when the null pointer exception is caught, we must still
         * be able to access local_s.
         * Our return address for the finally clause must also still
         * be intact.
         */
        s = local_s;
           }
       }
    }
}


/* Expected Output:
This is Perfect
*/
>Fix:
There is a new patch (attachment `patch-2')
>Release-Note:
This is the comple patch. With this one, you should be
able to recompile libgcj.
>Audit-Trail:

Formerly PR gcj/83


From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: gback@cs.utah.edu
Cc: java-gnats@sourceware.cygnus.com
Subject: Re: gcj/83: Failure to compile try/finally?
Date: Fri, 18 Feb 2000 16:23:37 -0800 (PST)

 gback@cs.utah.edu writes:
 
 > The following program produces incorrect results when
 > compiled from the java source.
 > ...
 > gcj cannot compile the .class file it generates with -C.
 
 This PR actually exposes two problems. The first one has to do with
 gcj not enforcing a correct order of evaluation for something like:
 
 	foo (a+b);
 
 With `a' and `b' being of type String or returning something of type
 String.
 
 `b' is currently evaluated before `a', if `a' modifies `b', its new
 value won't be used to construct the string. I believe this is fixed
 with the patch below.
 
 The second problem is a gcj verifier problem. I think we should file a
 second PR with it.
 
 On thing. I tried to rebuild libgcj with the patch, and I think it
 exposes an other problem in check_init (I might have a patch for
 that.) So, before I get a definite answer, I'm not checking anything
 in.
 
 Here's the patch to fix the order of evaluation problem. I'm filing an
 other PR for the gcj's generated class to native.
 
 ./A
 
 Fri Feb 18 16:18:04 2000  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
 	* parse.y (patch_string): Call force_evaluation_order on the
  	completed string concatenation tree.
 	* expr.c (force_evaluation_order): Call force_evaluation_order on
 	function's arguments too.
 
 Index: parse.y
 ===================================================================
 RCS file: /cvs/gcc/egcs/gcc/java/parse.y,v
 retrieving revision 1.135
 diff -u -p -r1.135 parse.y
 --- parse.y	2000/02/15 22:54:21	1.135
 +++ parse.y	2000/02/19 00:19:06
 @@ -10272,6 +10272,8 @@ patch_string (node)
        /* Temporary disable forbid the use of `this'. */
        ctxp->explicit_constructor_p = 0;
        ret = java_complete_tree (make_qualified_primary (node, invoke, 0));
 +      /* String concatenation arguments must be evaluated in order too. */
 +      ret = force_evaluation_order (ret);
        /* Restore it at its previous value */
        ctxp->explicit_constructor_p = saved;
        return ret;
 Index: expr.c
 ===================================================================
 RCS file: /cvs/gcc/egcs/gcc/java/expr.c,v
 retrieving revision 1.59
 diff -u -p -r1.59 expr.c
 --- expr.c	2000/02/18 18:17:37	1.59
 +++ expr.c	2000/02/19 00:19:06
 @@ -2694,7 +2694,7 @@ force_evaluation_order (node)
        for (cmp = NULL_TREE, arg = TREE_OPERAND (node, 1); 
  	   arg; arg = TREE_CHAIN (arg))
  	{
 -	  tree saved = save_expr (TREE_VALUE (arg));
 +	  tree saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
  	  cmp = (cmp == NULL_TREE ? saved :
  		 build (COMPOUND_EXPR, void_type_node, cmp, saved));
  	  TREE_VALUE (arg) = saved;
State-Changed-From-To: open->feedback
State-Changed-By: apbianco
State-Changed-When: Fri Feb 18 16:33:29 2000
State-Changed-Why:
    There is a patch available.

From: apbianco@cygnus.com
To: apbianco@cygnus.com, gback@cs.utah.edu, java-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: gcj/83
Date: 19 Feb 2000 00:33:29 -0000

 Synopsis: Failure to compile try/finally?
 
 State-Changed-From-To: open->feedback
 State-Changed-By: apbianco
 State-Changed-When: Fri Feb 18 16:33:29 2000
 State-Changed-Why:
     There is a patch available.
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=83&database=java

From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: java-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: gcj/83
Date: Mon, 21 Feb 2000 18:52:22 -0800 (PST)

 apbianco@cygnus.com writes:
 >      There is a patch available.
 
 There is a new patch available.
 
 ./A
State-Changed-From-To: feedback->closed
State-Changed-By: apbianco
State-Changed-When: Tue Mar  7 14:17:48 2000
State-Changed-Why:
    I checked in a patch to fix the PR. On the egcs-patches
    mailing list, I wrote `PR #108' but I really meant `PR #83'.
    I corrected my mistake in a follow-up:
    
      http://gcc.gnu.org/ml/gcc-patches/2000-03/msg00228.html
      http://gcc.gnu.org/ml/gcc-patches/2000-03/msg00229.html

From: apbianco@cygnus.com
To: apbianco@cygnus.com, gback@cs.utah.edu, java-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: gcj/83
Date: 7 Mar 2000 22:17:48 -0000

 Synopsis: Failure to compile try/finally?
 
 State-Changed-From-To: feedback->closed
 State-Changed-By: apbianco
 State-Changed-When: Tue Mar  7 14:17:48 2000
 State-Changed-Why:
     I checked in a patch to fix the PR. On the egcs-patches
     mailing list, I wrote `PR #108' but I really meant `PR #83'.
     I corrected my mistake in a follow-up:
     
       http://gcc.gnu.org/ml/gcc-patches/2000-03/msg00228.html
       http://gcc.gnu.org/ml/gcc-patches/2000-03/msg00229.html
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=83&database=java
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="patch-1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch-1"

RnJpIEZlYiAxOCAxNjoxODowNCAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFu
Y29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX3N0cmluZyk6IENhbGwgZm9yY2VfZXZh
bHVhdGlvbl9vcmRlciBvbiB0aGUKIAljb21wbGV0ZWQgc3RyaW5nIGNvbmNhdGVuYXRpb24gdHJl
ZS4KCSogZXhwci5jIChmb3JjZV9ldmFsdWF0aW9uX29yZGVyKTogQ2FsbCBmb3JjZV9ldmFsdWF0
aW9uX29yZGVyIG9uCglmdW5jdGlvbidzIGFyZ3VtZW50cyB0b28uCgpJbmRleDogcGFyc2UueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2djYy9lZ2NzL2djYy9qYXZhL3BhcnNlLnksdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTM1CmRpZmYgLXUgLXAgLXIxLjEzNSBwYXJzZS55Ci0tLSBwYXJz
ZS55CTIwMDAvMDIvMTUgMjI6NTQ6MjEJMS4xMzUKKysrIHBhcnNlLnkJMjAwMC8wMi8xOSAwMDox
OTowNgpAQCAtMTAyNzIsNiArMTAyNzIsOCBAQCBwYXRjaF9zdHJpbmcgKG5vZGUpCiAgICAgICAv
KiBUZW1wb3JhcnkgZGlzYWJsZSBmb3JiaWQgdGhlIHVzZSBvZiBgdGhpcycuICovCiAgICAgICBj
dHhwLT5leHBsaWNpdF9jb25zdHJ1Y3Rvcl9wID0gMDsKICAgICAgIHJldCA9IGphdmFfY29tcGxl
dGVfdHJlZSAobWFrZV9xdWFsaWZpZWRfcHJpbWFyeSAobm9kZSwgaW52b2tlLCAwKSk7CisgICAg
ICAvKiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBhcmd1bWVudHMgbXVzdCBiZSBldmFsdWF0ZWQgaW4g
b3JkZXIgdG9vLiAqLworICAgICAgcmV0ID0gZm9yY2VfZXZhbHVhdGlvbl9vcmRlciAocmV0KTsK
ICAgICAgIC8qIFJlc3RvcmUgaXQgYXQgaXRzIHByZXZpb3VzIHZhbHVlICovCiAgICAgICBjdHhw
LT5leHBsaWNpdF9jb25zdHJ1Y3Rvcl9wID0gc2F2ZWQ7CiAgICAgICByZXR1cm4gcmV0OwpJbmRl
eDogZXhwci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZ2NjL2VnY3MvZ2NjL2phdmEvZXhw
ci5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU5CmRpZmYgLXUgLXAgLXIxLjU5IGV4cHIuYwot
LS0gZXhwci5jCTIwMDAvMDIvMTggMTg6MTc6MzcJMS41OQorKysgZXhwci5jCTIwMDAvMDIvMTkg
MDA6MTk6MDYKQEAgLTI2OTQsNyArMjY5NCw3IEBAIGZvcmNlX2V2YWx1YXRpb25fb3JkZXIgKG5v
ZGUpCiAgICAgICBmb3IgKGNtcCA9IE5VTExfVFJFRSwgYXJnID0gVFJFRV9PUEVSQU5EIChub2Rl
LCAxKTsgCiAJICAgYXJnOyBhcmcgPSBUUkVFX0NIQUlOIChhcmcpKQogCXsKLQkgIHRyZWUgc2F2
ZWQgPSBzYXZlX2V4cHIgKFRSRUVfVkFMVUUgKGFyZykpOworCSAgdHJlZSBzYXZlZCA9IHNhdmVf
ZXhwciAoZm9yY2VfZXZhbHVhdGlvbl9vcmRlciAoVFJFRV9WQUxVRSAoYXJnKSkpOwogCSAgY21w
ID0gKGNtcCA9PSBOVUxMX1RSRUUgPyBzYXZlZCA6CiAJCSBidWlsZCAoQ09NUE9VTkRfRVhQUiwg
dm9pZF90eXBlX25vZGUsIGNtcCwgc2F2ZWQpKTsKIAkgIFRSRUVfVkFMVUUgKGFyZykgPSBzYXZl
ZDsK
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="patch-2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch-2"

MjAwMC0wMi0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+
CgoJKiBqYXZhLXRyZWUuaCAoSVNfSU5JVF9DSEVDS0VEKTogTmV3IGZsYWcuCgkqIGNoZWNrLWlu
aXQuYyAoY2hlY2tfaW5pdCk6IFRlc3QgYW5kIHNldCBJU19JTklUX0NIRUNLRUQuCgkqIHBhcnNl
LnkgKHBhdGNoX3N0cmluZyk6IENhbGwgZm9yY2VfZXZhbHVhdGlvbl9vcmRlciBvbiB0aGUKCWNv
bXBsZXRlZCBzdHJpbmcgY29uY2F0ZW5hdGlvbiB0cmVlLgoJKiBleHByLmMgKGZvcmNlX2V2YWx1
YXRpb25fb3JkZXIpOiBDYWxsIGZvcmNlX2V2YWx1YXRpb25fb3JkZXIgb24KCWZ1bmN0aW9uJ3Mg
YXJndW1lbnRzIHRvby4KCkluZGV4OiBjaGVjay1pbml0LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9nY2MvZWdjcy9nY2MvamF2YS9jaGVjay1pbml0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTcKZGlmZiAtdSAtcCAtcjEuMTcgY2hlY2staW5pdC5jCi0tLSBjaGVjay1pbml0LmMJMjAw
MC8wMS8yMSAyMDo1NzowMAkxLjE3CisrKyBjaGVjay1pbml0LmMJMjAwMC8wMi8yMiAwMjoyNzo0
NQpAQCAtNjE2LDcgKzYxNiw2IEBAIGNoZWNrX2luaXQgKGV4cCwgYmVmb3JlKQogICAgIGNhc2Ug
RklYX1RSVU5DX0VYUFI6CiAgICAgY2FzZSBJTkRJUkVDVF9SRUY6CiAgICAgY2FzZSBBRERSX0VY
UFI6Ci0gICAgY2FzZSBTQVZFX0VYUFI6CiAgICAgY2FzZSBQUkVERUNSRU1FTlRfRVhQUjoKICAg
ICBjYXNlIFBSRUlOQ1JFTUVOVF9FWFBSOgogICAgIGNhc2UgUE9TVERFQ1JFTUVOVF9FWFBSOgpA
QCAtNjI0LDYgKzYyMywxMyBAQCBjaGVja19pbml0IChleHAsIGJlZm9yZSkKICAgICBjYXNlIE5P
Tl9MVkFMVUVfRVhQUjoKICAgICBjYXNlIElOU1RBTkNFT0ZfRVhQUjoKICAgICAgIC8qIEF2b2lk
IG5lZWRsZXNzIHJlY3Vyc2lvbi4gKi8KKyAgICAgIGV4cCA9IFRSRUVfT1BFUkFORCAoZXhwLCAw
KTsKKyAgICAgIGdvdG8gYWdhaW47CisKKyAgICBjYXNlIFNBVkVfRVhQUjoKKyAgICAgIGlmIChJ
U19JTklUX0NIRUNLRUQgKGV4cCkpCisJcmV0dXJuOworICAgICAgSVNfSU5JVF9DSEVDS0VEIChl
eHApID0gMTsKICAgICAgIGV4cCA9IFRSRUVfT1BFUkFORCAoZXhwLCAwKTsKICAgICAgIGdvdG8g
YWdhaW47CiAKSW5kZXg6IGV4cHIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2djYy9lZ2Nz
L2djYy9qYXZhL2V4cHIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZmIC11IC1wIC1y
MS41OSBleHByLmMKLS0tIGV4cHIuYwkyMDAwLzAyLzE4IDE4OjE3OjM3CTEuNTkKKysrIGV4cHIu
YwkyMDAwLzAyLzIyIDAyOjI3OjUxCkBAIC0yNjk0LDcgKzI2OTQsNyBAQCBmb3JjZV9ldmFsdWF0
aW9uX29yZGVyIChub2RlKQogICAgICAgZm9yIChjbXAgPSBOVUxMX1RSRUUsIGFyZyA9IFRSRUVf
T1BFUkFORCAobm9kZSwgMSk7IAogCSAgIGFyZzsgYXJnID0gVFJFRV9DSEFJTiAoYXJnKSkKIAl7
Ci0JICB0cmVlIHNhdmVkID0gc2F2ZV9leHByIChUUkVFX1ZBTFVFIChhcmcpKTsKKwkgIHRyZWUg
c2F2ZWQgPSBzYXZlX2V4cHIgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIgKFRSRUVfVkFMVUUgKGFy
ZykpKTsKIAkgIGNtcCA9IChjbXAgPT0gTlVMTF9UUkVFID8gc2F2ZWQgOgogCQkgYnVpbGQgKENP
TVBPVU5EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBjbXAsIHNhdmVkKSk7CiAJICBUUkVFX1ZBTFVF
IChhcmcpID0gc2F2ZWQ7CkluZGV4OiBqYXZhLXRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL2djYy9lZ2NzL2djYy9qYXZhL2phdmEtdHJlZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjUyCmRpZmYgLXUgLXAgLXIxLjUyIGphdmEtdHJlZS5oCi0tLSBqYXZhLXRyZWUuaAkyMDAwLzAy
LzA5IDE0OjA4OjQ0CTEuNTIKKysrIGphdmEtdHJlZS5oCTIwMDAvMDIvMjIgMDI6Mjc6NTMKQEAg
LTU2LDYgKzU2LDcgQEAgc3RydWN0IEpDRjsKICAgIDU6IEhBU19CRUVOX0FMUkVBRFlfUEFSU0VE
X1AgKGluIElERU5USUZJRVJfTk9ERSkKICAgICAgIElTX0JSRUFLX1NUTVRfUCAoaW4gRVhQUl9X
SVRIX0ZJTEVfTE9DQVRJT04pCiAgICAgICBJU19DUkFGVEVEX1NUUklOR19CVUZGRVJfUCAoaW4g
Q0FMTF9FWFBSKQorICAgICAgSVNfSU5JVF9DSEVDS0VEIChpbiBTQVZFX0VYUFIpCiAgICA2OiBD
QU5fQ09NUExFVEVfTk9STUFMTFkgKGluIHN0YXRlbWVudCBub2RlcykuCiAKICAgIFVzYWdlIG9m
IFRZUEVfTEFOR19GTEFHXz86CkBAIC04MzgsNiArODM5LDEwIEBAIGV4dGVybiB0cmVlICp0eXBl
X21hcDsKIAogLyogVHJ1ZSBpZiBFWFBSIChhIENBTExfRVhQUiBpbiB0aGF0IGNhc2UpIGlzIGEg
Y3JhZnRlZCBTdHJpbmdCdWZmZXIgKi8KICNkZWZpbmUgSVNfQ1JBRlRFRF9TVFJJTkdfQlVGRkVS
X1AoRVhQUikgVFJFRV9MQU5HX0ZMQUdfNSAoRVhQUikKKworLyogVHJ1ZSBpZiBFWFBSIChhIFNB
VkVfRVhQUiBpbiB0aGF0IGNhc2UpIGhhZCBpdHMgY29udGVudCBhbHJlYWR5CisgICBjaGVja2Vk
IGZvciAodW4paW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgSVNfSU5J
VF9DSEVDS0VEKEVYUFIpIFRSRUVfTEFOR19GTEFHXzUgKEVYUFIpCiAKIC8qIElmIHNldCBpbiBD
QUxMX0VYUFIsIHRoZSByZWNlaXZlciBpcyAnc3VwZXInLiAqLwogI2RlZmluZSBDQUxMX1VTSU5H
X1NVUEVSKEVYUFIpIFRSRUVfTEFOR19GTEFHXzQgKEVYUFIpCkluZGV4OiBwYXJzZS5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvZ2NjL2VnY3MvZ2NjL2phdmEvcGFyc2UuYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMjMKZGlmZiAtdSAtcCAtcjEuMTIzIHBhcnNlLmMKLS0tIHBhcnNlLmMJ
MjAwMC8wMi8xNSAyMjo1NDoyMAkxLjEyMworKysgcGFyc2UuYwkyMDAwLzAyLzIyIDAyOjI4OjMy
CkBAIC0xMjk2Miw2ICsxMjk2Miw4IEBAIHBhdGNoX3N0cmluZyAobm9kZSkKICAgICAgIC8qIFRl
bXBvcmFyeSBkaXNhYmxlIGZvcmJpZCB0aGUgdXNlIG9mIGB0aGlzJy4gKi8KICAgICAgIGN0eHAt
PmV4cGxpY2l0X2NvbnN0cnVjdG9yX3AgPSAwOwogICAgICAgcmV0ID0gamF2YV9jb21wbGV0ZV90
cmVlIChtYWtlX3F1YWxpZmllZF9wcmltYXJ5IChub2RlLCBpbnZva2UsIDApKTsKKyAgICAgIC8q
IFN0cmluZyBjb25jYXRlbmF0aW9uIGFyZ3VtZW50cyBtdXN0IGJlIGV2YWx1YXRlZCBpbiBvcmRl
ciB0b28uICovCisgICAgICByZXQgPSBmb3JjZV9ldmFsdWF0aW9uX29yZGVyIChyZXQpOwogICAg
ICAgLyogUmVzdG9yZSBpdCBhdCBpdHMgcHJldmlvdXMgdmFsdWUgKi8KICAgICAgIGN0eHAtPmV4
cGxpY2l0X2NvbnN0cnVjdG9yX3AgPSBzYXZlZDsKICAgICAgIHJldHVybiByZXQ7CkluZGV4OiBw
YXJzZS55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZ2NjL2VnY3MvZ2NjL2phdmEvcGFyc2Uu
eSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzUKZGlmZiAtdSAtcCAtcjEuMTM1IHBhcnNlLnkK
LS0tIHBhcnNlLnkJMjAwMC8wMi8xNSAyMjo1NDoyMQkxLjEzNQorKysgcGFyc2UueQkyMDAwLzAy
LzIyIDAyOjI5OjAwCkBAIC0xMDI3Miw2ICsxMDI3Miw4IEBAIHBhdGNoX3N0cmluZyAobm9kZSkK
ICAgICAgIC8qIFRlbXBvcmFyeSBkaXNhYmxlIGZvcmJpZCB0aGUgdXNlIG9mIGB0aGlzJy4gKi8K
ICAgICAgIGN0eHAtPmV4cGxpY2l0X2NvbnN0cnVjdG9yX3AgPSAwOwogICAgICAgcmV0ID0gamF2
YV9jb21wbGV0ZV90cmVlIChtYWtlX3F1YWxpZmllZF9wcmltYXJ5IChub2RlLCBpbnZva2UsIDAp
KTsKKyAgICAgIC8qIFN0cmluZyBjb25jYXRlbmF0aW9uIGFyZ3VtZW50cyBtdXN0IGJlIGV2YWx1
YXRlZCBpbiBvcmRlciB0b28uICovCisgICAgICByZXQgPSBmb3JjZV9ldmFsdWF0aW9uX29yZGVy
IChyZXQpOwogICAgICAgLyogUmVzdG9yZSBpdCBhdCBpdHMgcHJldmlvdXMgdmFsdWUgKi8KICAg
ICAgIGN0eHAtPmV4cGxpY2l0X2NvbnN0cnVjdG9yX3AgPSBzYXZlZDsKICAgICAgIHJldHVybiBy
ZXQ7Cg==




More information about the Gcc-prs mailing list