From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9278 invoked by alias); 22 Mar 2002 11:16:07 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 9243 invoked by uid 71); 22 Mar 2002 11:16:03 -0000 Resent-Date: 22 Mar 2002 11:16:02 -0000 Resent-Message-ID: <20020322111602.9240.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, Norbert.Galm@mchp.siemens.de Received:(qmail 9015 invoked by uid 61); 22 Mar 2002 11:14:37 -0000 Message-Id:<20020322111437.9010.qmail@sources.redhat.com> Date: Fri, 22 Mar 2002 03:16:00 -0000 From: Norbert.Galm@mchp.siemens.de Reply-To: Norbert.Galm@mchp.siemens.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/6036: gcc bug: incorrect scoping when using templates X-SW-Source: 2002-03/txt/msg00834.txt.bz2 List-Id: >Number: 6036 >Category: c++ >Synopsis: gcc bug: incorrect scoping when using templates >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Fri Mar 22 03:16:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Norbert Galm >Release: gcc version 2.95.3 20010315 (release) >Organization: >Environment: sparc-sun-solaris2.5.1 >Description: The use of variables within templates, which are not declared at the definition of the template and which do not depend on the template parameters, doesn't produce a compiler error. Instead variables, which are defined at the instantiation of the template, are used and incorrect code is produced. More details are in the attachment. >How-To-Repeat: template void Print (T t) { i+=5; } int i=3; int main () { //int i=3; //for (int i=3; i<10; ++i) /* do something or not */; double d; Print(d); return i; // result with gcc, version 2.95.3 for unix: 8 } >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="faulty_scope.txt.bugreport.attachment" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="faulty_scope.txt.bugreport.attachment" VGhlIGZvbGxvd2luZyB0ZXh0IHJlcG9ydHMgYSBidWcgZm9yIHRoZSBnY2MsIHZlcnNpb24gMi45 NS4zLCBvbiBhIHVuaXggc3lzdGVtLgpUaGUgY29tcGlsZXIgZ2VuZXJhdGVzIGluY29ycmVjdCBj b2RlIChhbmQgbWVzc2FnZXMpIGR1ZSB0byBmYXVsdHkgc2NvcGluZwppbiB0aGUgY29udGV4dCBv ZiB0ZW1wbGF0ZXMuClRoZSBmaWxlIGlzIHZlcnkgc2hvcnQgYW5kIGRvZXNuJ3QgaW5jbHVkZSBv dGhlcnMuIFRoZXJlZm9yZSBJIGRpZG4ndCBwb3N0CnRoZSBwcmVwcm9jZXNzZWQgZmlsZS4gQ29u c2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlOgoKLS0gRmlsZSAiZnNfYS5jcHAiIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIFByaW50IChUIHQp CnsKCWkrPTU7Cn0KCmludCBpPTM7CgppbnQgbWFpbiAoKQp7CgkvL2ludCBpPTM7CgkvL2ZvciAo aW50IGk9MzsgaTwxMDsgKytpKSAvKiBkbyBzb21ldGhpbmcgb3Igbm90ICovOwoKCWRvdWJsZSBk OwoJUHJpbnQoZCk7CglyZXR1cm4gaTsgLy8gcmVzdWx0IHdpdGggZ2NjLCB2ZXJzaW9uIDIuOTUu MyBmb3IgdW5peDogOAp9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKVGhlIGNvbXBpbGF0aW9uIG9mICJmc19hLmNwcCIgd2l0aCBnY2MsIHZlcnNp b24gMi45NS4zIG9uIGEgdW5peCBzeXN0ZW0sCnN1Y2NlZWRzIGluc3RlYWQgb2YgZ2l2aW5nIGEg Y29tcGlsZSB0aW1lIGVycm9yIChgaScgaXMgbm90IGRlZmluZWQKd2l0aGluIGBQcmludCcpLiBU aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgcmV0dXJucyA4IGluc3RlYWQgb2YgMy4KClRoZSBjb21t YW5kOgoKZ2NjIC12IC1zYXZlLXRlbXBzIGZzX2EuY3BwCgpUaGUgb3V0cHV0OgoKUmVhZGluZyBz cGVjcyBmcm9tIC9zdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4xLzIu OTUuMy9zcGVjcwpnY2MgdmVyc2lvbiAyLjk1LjMgMjAwMTAzMTUgKHJlbGVhc2UpCiAvc3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS8yLjk1LjMvY3BwMCAtbGFuZy1j KysgLXYgLURfX0dOVUNfXz0yIC1EX19HTlVHX189MiAtRF9fR05VQ19NSU5PUl9fPTk1IC1EX19j cGx1c3BsdXMgLURzcGFyYyAtRHN1biAtRHVuaXggLURfX3N2cjRfXyAtRF9fU1ZSNCAtRF9fc3Bh cmNfXyAtRF9fc3VuX18gLURfX3VuaXhfXyAtRF9fc3ZyNF9fIC1EX19TVlI0IC1EX19zcGFyYyAt RF9fc3VuIC1EX191bml4IC1Bc3lzdGVtKHVuaXgpIC1Bc3lzdGVtKHN2cjQpIC1EX19FWENFUFRJ T05TIC1EX19HQ0NfTkVXX1ZBUkFSR1NfXyAtQWNwdShzcGFyYykgLUFtYWNoaW5lKHNwYXJjKSBm c19hLmNwcCBmc19hLmlpCkdOVSBDUFAgdmVyc2lvbiAyLjk1LjMgMjAwMTAzMTUgKHJlbGVhc2Up IChzcGFyYykKI2luY2x1ZGUgIi4uLiIgc2VhcmNoIHN0YXJ0cyBoZXJlOgojaW5jbHVkZSA8Li4u PiBzZWFyY2ggc3RhcnRzIGhlcmU6CiAvc3cvbG9jYWwvaW5jbHVkZS9nKysKIC9zdy9sb2NhbC9p bmNsdWRlCiAvc3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS8yLjk1 LjMvLi4vLi4vLi4vLi4vc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS9pbmNsdWRlCiAvc3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS8yLjk1LjMvaW5jbHVkZQogL3Vzci9p bmNsdWRlCkVuZCBvZiBzZWFyY2ggbGlzdC4KVGhlIGZvbGxvd2luZyBkZWZhdWx0IGRpcmVjdG9y aWVzIGhhdmUgYmVlbiBvbWl0dGVkIGZyb20gdGhlIHNlYXJjaCBwYXRoOgpFbmQgb2Ygb21pdHRl ZCBsaXN0LgogL3N3L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvMi45 NS4zL2NjMXBsdXMgZnNfYS5paSAtcXVpZXQgLWR1bXBiYXNlIGZzX2EuY2MgLXZlcnNpb24gLW8g ZnNfYS5zCkdOVSBDKysgdmVyc2lvbiAyLjk1LjMgMjAwMTAzMTUgKHJlbGVhc2UpIChzcGFyYy1z dW4tc29sYXJpczIuNS4xKSBjb21waWxlZCBieSBHTlUgQyB2ZXJzaW9uIDIuOTUuMyAyMDAxMDMx NSAocmVsZWFzZSkuCiAvc3cvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS9iaW4vYXMgLVYg LVF5IC1zIC1vIGZzX2EubyBmc19hLnMKR05VIGFzc2VtYmxlciB2ZXJzaW9uIDIuMTAuMSAoc3Bh cmMtc3VuLXNvbGFyaXMyLjUuMSkgdXNpbmcgQkZEIHZlcnNpb24gMi4xMC4xCiAvc3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS8yLjk1LjMvY29sbGVjdDIgLVYgLVkg UCwvdXNyL2Njcy9saWI6L3Vzci9saWIgLVF5IC9zdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuNS4xLzIuOTUuMy9jcnQxLm8gL3N3L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi41LjEvMi45NS4zL2NydGkubyAvdXNyL2Njcy9saWIvdmFsdWVzLVhhLm8g L3N3L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvMi45NS4zL2NydGJl Z2luLm8gLUwvc3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS8yLjk1 LjMgLUwvc3cvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMyLjUuMS9saWIgLUwvdXNyL2Njcy9iaW4g LUwvdXNyL2Njcy9saWIgLUwvc3cvbG9jYWwvbGliIGZzX2EubyAtbGdjYyAtbGMgLWxnY2MgL3N3 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvMi45NS4zL2NydGVuZC5v IC9zdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4xLzIuOTUuMy9jcnRu Lm8KR05VIGxkIHZlcnNpb24gMi4xMC4xICh3aXRoIEJGRCAyLjEwLjEpCiAgU3VwcG9ydGVkIGVt dWxhdGlvbnM6CiAgIGVsZjMyX3NwYXJjCgoKClNvbWUgbW9yZSB0ZXN0cywgd2hpY2ggSSBoYXZl IGRvbmU6CgpSZXBsYWNpbmcgdGhlIGdsb2JhbCBkZWZpbml0aW9uIG9mIGBpJyBieSB0aGUgbG9j YWwgb25lIChlaXRoZXIgb3V0c2lkZQpvciBpbnNpZGUgdGhlIGBmb3InLXN0YXRlbWVudCkgcmVz dWx0cyBpbiB0aGUgKGNvcnJlY3QpIGNvbXBpbGUgdGltZSBlcnJvci4KU28gdGhlIGZhdWx0eSBz Y29wZSBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgY2FzZSBvZiBsb2NhbCB2YXJpYWJsZXMgKHNvIGZh ciAtIGZvcgptb3JlIGRldGFpbHMgc2VlIGJlbG93KS4gQmVsb3cgaXQgYWxzbyBiZWNvbWVzIGNs ZWFyLCB3aHkgdGhlIGxhdHRlciB0d28gY2FzZXMKKGBmb3InLXN0YXRlbWVudCBvciBub3QpIGFy ZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuCgpDb25zaXN0ZW50bHksIHJlcGxhY2luZyBgaSs9NTsn IGluIGBQcmludCcgYnkgYGludCBpOycgcmVzdWx0cyBpbiBhIChmYXVsdHkpCmNvbXBpbGVyIHdh cm5pbmcgZm9yIHRoZSBnbG9iYWwgY2FzZSwgc2F5aW5nIHRoYXQgYFByaW50OjppJyBzaGFkb3dz IGA6OmknLgpGb3IgdGhpcywgdXNlIHRoZSBjb21waWxlciBvcHRpb24gIi1Xc2hhZG93Ii4KCi0t IEZpbGUgImZzX2IuY3BwIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4Kdm9pZCBQcmludCAoVCB0KQp7CglpbnQgaTsKfQoKaW50IGk9MzsKCmludCBt YWluICgpCnsKCS8vaW50IGk9MzsKCS8vZm9yIChpbnQgaT0zOyBpPDEwOyArK2kpIC8qIGRvIHNv bWV0aGluZyBvciBub3QgKi87CgoJZG91YmxlIGQ7CglQcmludChkKTsKCXJldHVybiBpOwp9Cgot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQWdhaW4s IHRoZSBwcm9ibGVtIGRvZXMgbm90IG9jY3VyIGZvciB0aGUgdHdvIGxvY2FsIGNhc2VzLiBBbGwg dGhlc2UgcHJvYmxlbXMKb2NjdXIgb25seSBpbiB0aGUgY29udGV4dCBvZiB0ZW1wbGF0ZXMuIFNv IGZhciBubyBsb2NhbCB2YXJpYWJsZSB3YXMgc2hhZG93ZWQuClRoZSBuZXh0IGV4YW1wbGUgc2hv d3MgdGhhdCB0aGlzIG1heSBhbHNvIGhhcHBlbi4KCi0tIEZpbGUgImZzX2MuY3BwIiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBQcmludCAo VCB0KQp7CglpbnQgaTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBNZW1vcnkgewoJVCBE YXRhWzEwXTsKCXZpcnR1YWwgdm9pZCBTaG93ICgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZv aWQgTWVtb3J5PFQ+OjpTaG93ICgpCnsKCVQgdDsKCWZvciAoaW50IGk9MDsgaTwxMDsgKytpKSAv KiBkbyBzb21ldGhpbmcgb3Igbm90ICovOwoJUHJpbnQodCk7Cn0KCmludCBtYWluICgpCnsKCU1l bW9yeTxkb3VibGU+IG1lbTsKCXJldHVybiAwOwp9CgovLyBlbmQgb2YgZmlsZSAobGluZSAyNykK Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUg Y29tbWFuZAoJZ2NjIGZzX2MuY3BwIC1Xc2hhZG93CnByb2R1Y2VzCglmc19jLmNwcDogSW4gZnVu Y3Rpb24gYHZvaWQgUHJpbnQ8ZG91YmxlPihkb3VibGUpJzoKCWZzX2MuY3BwOjE4OiAgIGluc3Rh bnRpYXRlZCBmcm9tIGBNZW1vcnk8ZG91YmxlPjo6U2hvdygpJwoJZnNfYy5jcHA6Mjc6ICAgaW5z dGFudGlhdGVkIGZyb20gaGVyZQoJZnNfYy5jcHA6NDogd2FybmluZzogZGVjbGFyYXRpb24gb2Yg YGknIHNoYWRvd3MgcHJldmlvdXMgbG9jYWwKClRodXMgYFByaW50OjppJyBzaGFkb3dzIGBNZW1v cnk6OlNob3c6OmknLCB3aGljaCBpbiBmYWN0IGlzIG5vdCB0aGUgY2FzZSBmb3IKdHdvIHJlYXNv bnM6CiAtIEludm9raW5nIGdjYyBuZWl0aGVyIHdpdGggIi1mZm9yLXNjb3BlIiBub3Igd2l0aCAi LWZuby1mb3Itc2NvcGUiIHNob3VsZAogICByZXN0cmljdCB0aGUgc2NvcGUgb2YgYE1lbW9yeTo6 U2hvdzo6aScgdG8gdGhlIGBmb3InIGxvb3AuIFRoaXMgaXMgYWN0dWFsbHkKICAgdGhlIGNhc2Us IHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhY2Nlc3MgYGknIG91dHNpZGUgdGhlIGxvb3Au IChUcnkgaXQuKQogLSBUaGUgb2J2aW91cyByZWFzb24gdGhhdCBgUHJpbnQnIGlzIG5vdCBpbiB0 aGUgc2NvcGUgb2YgYE1lbW9yeTo6U2hvdycuCgpTdXJwcmlzaW5nbHksIHJlcGxhY2luZyBgaW50 IGk7JyBpbiBgUHJpbnQnIGJ5IGBpKz01Oycgbm93IHJlc3VsdHMgaW4gYQpjb21waWxlIHRpbWUg ZXJyb3IgYW5kIG5vdCBpbiBhbiBpbmNvcnJlY3QgZXhlY3V0YWJsZSBhcyBpdCB3YXMgaW4gdGhl IGNhc2UKb2YgYSBnbG9iYWwgYGknLiBUaGUgZXhhY3QgZXJyb3IgbWVzc2FnZSBkZXBlbmRzIG9u IHdoZXRoZXIgdGhlIG9wdGlvbgoiLWZmb3Itc2NvcGUiLCAiLWZuby1mb3Itc2NvcGUiIG9yIG5v bmUgb2YgdGhlbSBpcyB1c2VkLgpUaGUgbGF0dGVyIGNhc2UgKG5vbmUgaXMgdXNlZCkgcmVzdWx0 cyBpbiBhbiBpbnRlcmVzdGluZyBlcnJvciBtZXNzYWdlOgoJZnNfYy5jcHA6IEluIGZ1bmN0aW9u IGB2b2lkIFByaW50PGRvdWJsZT4oZG91YmxlKSc6Cglmc19jLmNwcDoxODogICBpbnN0YW50aWF0 ZWQgZnJvbSBgTWVtb3J5PGRvdWJsZT46OlNob3coKScKCWZzX2MuY3BwOjI3OiAgIGluc3RhbnRp YXRlZCBmcm9tIGhlcmUKCWZzX2MuY3BwOjQ6IG5hbWUgbG9va3VwIG9mIGBpJyBjaGFuZ2VkIGZv ciBuZXcgQU5TSSBgZm9yJyBzY29waW5nCglmc19jLmNwcDoxNzogICB1c2luZyBvYnNvbGV0ZSBi aW5kaW5nIGF0IGBpJwoJZnNfYy5jcHA6NDogdXNlIG9mIGBhdXRvJyB2YXJpYWJsZSBmcm9tIGNv bnRhaW5pbmcgZnVuY3Rpb24KCWZzX2MuY3BwOjE3OiAgIGBpbnQgaScgZGVjbGFyZWQgaGVyZQoK V2hhdCBpcyBhIGNvbnRhaW5pbmcgZnVuY3Rpb24/IE5vIGZ1bmN0aW9uIGNhbiBjb250YWluIG90 aGVyIGZ1bmN0aW9ucyBpbiBDL0MrKy4KCk5vdyBiYWNrIHRvIHRoZSBjYXNlIG9mIHRoZSBkZWZp bml0aW9uIGBpbnQgaTsnIGluIGBQcmludCc6IFRoZSBmYXVsdHkgd2FybmluZwooYFByaW50Ojpp JyBzaGFkb3dzIGBNZW1vcnk6OlNob3c6OmknKSBkb2Vzbid0IG9jY3VyLCBpZiBhdCBsZWFzdCBv bmUgb2YgdGhlCmZvbGxvd2luZyBpcyBzYXRpc2ZpZWQ6CiAxLiBFaXRoZXIgdGhlIGNvbXBpbGVy IG9wdGlvbiAiLWZmb3Itc2NvcGUiIG9yIHRoZSBvcHRpb24gIi1mbm8tZm9yLXNjb3BlIgogICAg aXMgdXNlZC4gVGhlIGxhdHRlciBpcyB0aGUgc3VycHJpc2luZyBjYXNlISEhCiAyLiBUaGUgYGZv cicgc3RhdGVtZW50IGluIGBTaG93JyBpcyByZXBsYWNlZCBieSBgaW50IGk7Jy4gSW4gZmFjdCwg dGhpcyBjYXNlCiAgICBpcyByZWxhdGVkIHRvIDEuCiAzLiBUaGUgY2FsbCBvZiBgUHJpbnQnIGlz IGNvbnRhaW5lZCBpbiB0aGUgYGZvcicgc3RhdGVtZW50IChqdXN0IHJlbW92ZSB0aGUKICAgIHNl bWljb2xvbiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lKS4KIDQuIGBTaG93JyBpcyBub24tdmlydHVh bC4KIDUuIGBNZW0nIGlzIG5vIHRlbXBsYXRlIGNsYXNzIChyZXBsYWNlIHRoZSB0ZW1wbGF0ZSBw YXJhbXRlciBgVCcgYnkgYGRvdWJsZScpLgogNi4gYFByaW50JyBpcyBubyB0ZW1wbGF0ZSBmdW5j dGlvbiAocmVwbGFjZSBgVCcgYnkgYGRvdWJsZScpLgoKU28gdGhlIGZhdWx0eSB3YXJuaW5nIG9j Y3VycyBpbiB0aGUgY2FzZSBvZiBhIGBmb3InIHN0YXRlbWVudCB3aXRoaW4gYSB2aXJ0dWFsCm1l bWJlciBmdW5jdGlvbiBvZiBhIHRlbXBsYXRlIGNsYXNzLCBpZiBzb21lIG90aGVyIHRlbXBsYXRl IGZ1bmN0aW9uIGlzIGNhbGxlZAooZm9sbG93aW5nIHRoZSBgZm9yJyBzdGF0ZW1lbnQpIGFuZCB0 aGUgc3RhbmRhcmQgY29tcGlsZXIgdHJlYXRtZW50IG9mCmBmb3InLWluaXQtc3RhdGVtZW50cyBp cyB1c2VkLiBUaGVzZSBhcmUgcmF0aGVyIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KQnV0IEkgaGFk IHRoZW0gaW4gbXkgY29kZSwgYmVmb3JlIEkga25ldyB0aGVzZSBjb21waWxlciBvcHRpb25zCihl LmcuIGluIGEgbWF0cml4IGxpYnJhcnkgY29udGFpbmluZyBzZXZlcmFsIHRlbXBsYXRlIGNsYXNz ZXMgYW5kIGZ1bmN0aW9ucykuCgpBbm90aGVyLCBhbmFsb2dvdXMgY2lyY3Vtc3RhbmNlIGZvciB0 aGlzIGZhdWx0eSB3YXJuaW5nIGlzLCB3aGVuIHRoZQpgZm9yJyBzdGF0ZW1lbnQgaXMgY29udGFp bmVkIGluIGEgdGVtcGxhdGUgZnVuY3Rpb246CgotLSBGaWxlICJmc19kLmNwcCIgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgUHJpbnQgKFQg dCkKewoJaW50IGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIFAgKFQgdCkKewoJZm9yIChp bnQgaT0wOyBpPDEwOyArK2kpIC8qIGRvIHNvbWV0aGluZyBvciBub3QgKi87CglQcmludCh0KTsK fQoKaW50IG1haW4gKCkKewoJZG91YmxlIGQ7CglQKGQpOwoJcmV0dXJuIDA7Cn0KCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpMaWtld2lzZSwgdGhl IHRlbXBsYXRlIGZ1bmN0aW9uIGBQcmludCcgbWF5IGJlIHJlcGxhY2VkIGJ5IHNvbWUgbWVtYmVy IGZ1bmN0aW9uLAp3aGVuIGVpdGhlciB0aGlzIGNhbGxlZCBtZW1iZXIgZnVuY3Rpb24gb3IgdGhl IGNvbnRhaW5pbmcgY2xhc3MgaXMgYSB0ZW1wbGF0ZS4KClRvIHN1bW1hcml6ZToKCkluIHRoZSBj YXNlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlICgiZnNfYS9iLmNwcCIpLCB0aGVyZSBpcyBhIHJlYWwg YnVnLCB3aGljaCBoYXMKdG8gYmUgZml4ZWQgKG9yIG1heSBhbHJlYWR5IGJlIGZpeGVkKS4KSW4g dGhlIGNhc2Ugb2YgYSBsb2NhbCB2YXJpYWJsZSwgb25lIG1pZ2h0IGFyZ3VlIHRoYXQgdXNpbmcg Ii1mZm9yLXNjb3BlIiBpcyB0aGUKb25seSB0cnV0aCBmb3IgdGhlIGZ1dHVyZSAoaW4gZmFjdCwg aW4gdGhlIG1lYW50aW1lIEknbSB1c2luZyBpdCBjb25zZXF1ZW50bHkpCmFuZCBvbmx5IGZhdWx0 eSB3YXJuaW5ncyBhbmQgbm8gaW5jb3JyZWN0IGNvZGUgaXMgZ2VuZXJhdGVkLiBCdXQgdGhlcmUg aXMgYSBidWcsCndoaWNoIG1heSBoYXZlIG90aGVyIGVmZmVjdHMgbm90IHJlY29nbml6ZWQgc28g ZmFyLgoKCk9uZSBsYXN0IGN1cmlvdXMgb2JzZXJ2YXRpb246CgpUaGUgd2FybmluZywgdGhhdCBg UHJpbnQ6OmknIHNoYWRvd3MgYE1lbW9yeTo6U2hvdzo6aScgY29udGFpbnMgaW5mb3JtYXRpb24s CmluIHdoaWNoIGxpbmVzIHRoZSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucyBhcmUgZG9uZS4gVGhl c2UgbGluZXMgYXJlIGluY29ycmVjdCEKVGhlIGluc3RhbnRpYXRpb24gb2YgYE1lbW9yeTxkb3Vi bGU+JyBpcyBub3QgaW4gbGluZSAyNyAoc2VlICJmc19jLmNwcCIpLgpIZXJlIHRoZSBjb21waWxl ciBpbmNvcnJlY3RseSByZXBvcnRzIHRoZSBlbmQgb2YgdGhlIGZpbGUuCgpTb21ldGltZXMsIHRo ZSBjb3JyZWN0IGxpbmVzIGJ1dCB0aGUgd3JvbmcgY29udGV4dCBpcyByZXBvcnRlZC4gSW4gdGhl CmZvbGxvd2luZyBleGFtcGxlLCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQgYG4nIGlzIG5v dCBkZWNsYXJlZCBpbiBsaW5lIDgKKHRoaXMgaXMgY29ycmVjdCkgaW4gZnVuY3Rpb24gYGludCBt YWluKCknICh0aGlzIGlzIGluY29ycmVjdCkuCgotLSBGaWxlICJmc19lLmNwcCIgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdGVtcGxhdGUgPGludCBuLCBjbGFzcyBUPgpzdHJ1Y3Qg VmVjdG9yIHsKCVQgRWxlW25dOwp9OwoKdGVtcGxhdGUgPC8qaW50IG4sKi8gY2xhc3MgVD4KaW50 IG9wZXJhdG9yKiAoY29uc3QgVmVjdG9yPG4sVD4mIHYxLCBjb25zdCBWZWN0b3I8bixUPiYgdjIp CnsKCS8qIGNhbGN1bGF0ZSBzY2FsYXIgcHJvZHVjdCAqLwoJcmV0dXJuIDA7Cn0KCmludCBtYWlu ICgpCnsKCVZlY3RvcjwzLGludD4gdjM7CglyZXR1cm4gdjMgKiB2MzsKfQoKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClNvIHRoZXJlIG1heSBiZSB0 aHJlZSBkaWZmZXJlbnQgYnVnczoKIC0gVGhlIGZhdWx0eSBzY29waW5nIChhdCBsZWFzdCBmb3Ig dGhlIGdsb2JhbCBjYXNlKS4KIC0gVGhlIHN0cmFuZ2UgYmVoYXZpb3VyIG9mIGBmb3InLXN0YXRl bWVudHMgaW4gdGhlIGNvbnRleHQgb2YgdGVtcGxhdGVzLgogLSBUaGUgaW5jb3JyZWN0IHJlcG9y dCBvZiBsaW5lcy9jb250ZXh0cyBpbiB0aGUgbWVzc2FnZXMuCkl0IG1heSBhbHNvIGJlIHRoYXQg dGhlc2UgZXJyb3JzIGFyZSBkdWUgdG8gb25lIGJ1ZyBvbmx5LgoKCkJlc3QgcmVnYXJkcywKICAg IE5vcmJlcnQgR2FsbQoK