<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;
panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}
span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">15: INVOKESPECIAL consumes 3 objects from stack<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="color:black">From:
</span></b><span style="color:black">classfile-api-dev <classfile-api-dev-retn@openjdk.org> on behalf of Øystein Myhre Andersen <o.myhre@gmail.com><br>
<b>Date: </b>Monday, 10 June 2024 at 10:07<br>
<b>To: </b>classfile-api-dev <classfile-api-dev@openjdk.org><br>
<b>Subject: </b>Wrong error reported<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal">I got:<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<div>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">Exception in thread "main"
</span><span style="font-size:10.0pt;font-family:Consolas;color:#0066CC">java.lang.IllegalArgumentException</span><span style="font-size:10.0pt;font-family:Consolas;color:red">: Operand stack underflow at bytecode offset 26 of method _STM()</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">- max stack: 65535</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">max locals: 65535</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">attributes: []</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">//stack map frame @0: {locals: [simulaTestPrograms/adHoc01_P_TXT2], stack: []}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">0: {opcode: ALOAD_0, slot: 0}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">1: {opcode: GETFIELD, owner: simulaTestPrograms/adHoc01_P_TXT2, field name: P_T, field type: Lsimula/runtime/RTS_TXT;}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">4: {opcode: NEW, type: simulaTestPrograms/adHoc01_P_TXT2}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">7: {opcode: DUP}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">8: {opcode: ALOAD_0, slot: 0}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">9: {opcode: GETFIELD, owner: simula/runtime/RTS_RTObject, field name: _SL, field type: Lsimula/runtime/RTS_RTObject;}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">12: {opcode: CHECKCAST, type: simulaTestPrograms/adHoc01}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">15: {opcode: INVOKESPECIAL, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: <init>, method type: (Lsimula/runtime/RTS_RTObject;Lsimula/runtime/RTS_TXT;)V}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">18: {opcode: GETFIELD, owner: simulaTestPrograms/adHoc01_P_TXT2, field name: _RESULT, field type: Lsimula/runtime/RTS_TXT;}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">21: {opcode: LDC, constant value: Abra}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">23: {opcode: INVOKESTATIC, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: _ASGSTR, method type: (Lsimula/runtime/RTS_TXT;Ljava/lang/String;)Lsimula/runtime/RTS_TXT;}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">26: {opcode: INVOKESTATIC, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: _ASGTXT, method type: (Lsimula/runtime/RTS_TXT;Lsimula/runtime/RTS_TXT;)Lsimula/runtime/RTS_TXT;}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">29: {opcode: POP}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">30: {opcode: ALOAD_0, slot: 0}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">31: {opcode: INVOKEVIRTUAL, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: EBLK, method type: ()V}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">34: {opcode: ALOAD_0, slot: 0}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:red">35: {opcode: ARETURN}</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Then I monitor the operand stack as follows:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> 0: {opcode: ALOAD_0, slot: 0}<br>
1: {opcode: GETFIELD, owner: simulaTestPrograms/adHoc01_P_TXT2, field name: P_T, field type: Lsimula/runtime/RTS_TXT;}<br>
==> STACK: this.P_T<br>
<br>
4: {opcode: NEW, type: simulaTestPrograms/adHoc01_P_TXT2}<br>
==> STACK: P_TXT2, this.P_T<br>
<br>
7: {opcode: DUP}<br>
==> STACK: P_TXT2, P_TXT2, this.P_T<br>
<br>
8: {opcode: ALOAD_0, slot: 0}<br>
9: {opcode: GETFIELD, owner: simula/runtime/RTS_RTObject, field name: _SL, field type: Lsimula/runtime/RTS_RTObject;}<br>
12: {opcode: CHECKCAST, type: simulaTestPrograms/adHoc01}<br>
==> STACK: this.SL, P_TXT2, P_TXT2, this.P_T<br>
<br>
15: {opcode: INVOKESPECIAL, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: <init>, method type: (Lsimula/runtime/RTS_RTObject;Lsimula/runtime/RTS_TXT;)V}<br>
==> STACK: P_TXT2, this.P_T<br>
<br>
18: {opcode: GETFIELD, owner: simulaTestPrograms/adHoc01_P_TXT2, field name: _RESULT, field type: Lsimula/runtime/RTS_TXT;}<br>
==> STACK: P_TXT2.RESULT, this.P_T<br>
<br>
21: {opcode: LDC, constant value: Abra}<br>
==> STACK: "Abra", P_TXT2.RESULT, this.P_T<br>
<br>
23: {opcode: INVOKESTATIC, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: _ASGSTR, method type: (Lsimula/runtime/RTS_TXT;Ljava/lang/String;)Lsimula/runtime/RTS_TXT;}<br>
==> STACK: Return-value-1, this.P_T<br>
<br>
26: {opcode: INVOKESTATIC, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: _ASGTXT, method type: (Lsimula/runtime/RTS_TXT;Lsimula/runtime/RTS_TXT;)Lsimula/runtime/RTS_TXT;}<br>
==> STACK: Return-value-2<br>
<br>
29: {opcode: POP}<br>
==> STACK: <br>
<br>
30: {opcode: ALOAD_0, slot: 0}<br>
31: {opcode: INVOKEVIRTUAL, owner: simulaTestPrograms/adHoc01_P_TXT2, method name: EBLK, method type: ()V}<br>
34: {opcode: ALOAD_0, slot: 0}<br>
35: {opcode: ARETURN}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This shows that the error 'Operand stack underflow at bytecode offset 26 of method _STM()' is wrong.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I have also compiled it fram java source:<o:p></o:p></p>
</div>
<div>
<div>
<div>
<p style="margin:0in"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> adHoc01_P_TXT2 _STM() {<o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// JavaLine 45 <== SourceLine 6</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0in"><i><span style="font-size:10.0pt;font-family:Consolas;color:black">_ASGTXT</span></i><span style="font-size:10.0pt;font-family:Consolas;color:black">(</span><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">P_T</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
<i>_ASGSTR</i>(</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> adHoc01_P_TXT2((</span><i><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">_CUR</span></i><span style="font-size:10.0pt;font-family:Consolas;color:black">.</span><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">_SL</span><span style="font-size:10.0pt;font-family:Consolas;color:black">)).</span><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">_RESULT</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"Abra"</span><span style="font-size:10.0pt;font-family:Consolas;color:black">) );<o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:black">EBLK();<o:p></o:p></span></p>
<p style="margin:0in"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">this</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.0pt;font-family:Consolas;color:black">}
</span><span style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// End of Procedure BODY</span><span style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">Which compiles to the same byte-code. AND it executes correctly.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Is there something I'm not seeing here ?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">- Regards, Øystein Myhre Andersen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>