<!-- 
RSS generated by JIRA (4.4#649-r158309) at Sat May 25 13:01:28 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/si/jira.issueviews:issue-xml/CLJ-1133/CLJ-1133.xml?field=key&field=summary
-->
<rss version="0.92" >
<channel>
    <title>Clojure JIRA</title>
    <link>http://dev.clojure.org/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>4.4</version>
        <build-number>649</build-number>
        <build-date>25-07-2011</build-date>
    </build-info>

<item>
            <title>[CLJ-1133] Certain actions on mutable fields in deftype lead to very strange error messages</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1133</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Consider the following code:&lt;/p&gt;

&lt;p&gt;(definterface Test&lt;br/&gt;
  (^void fail []))&lt;/p&gt;

&lt;p&gt;(deftype TestImpl&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;^{:unsynchronized-mutable true :tag int} x&amp;#93;&lt;/span&gt;&lt;br/&gt;
  Test&lt;br/&gt;
  (fail &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (set! x (dec x))))&lt;/p&gt;

&lt;p&gt;Its compilation fails with the following message:&lt;br/&gt;
CompilerException java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;.../test.clj:27) &lt;/p&gt;

&lt;p&gt;The following code works:&lt;/p&gt;

&lt;p&gt;(definterface Test&lt;br/&gt;
  (^void fail []))&lt;/p&gt;

&lt;p&gt;(deftype TestImpl&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;^{:unsynchronized-mutable true :tag int} x&amp;#93;&lt;/span&gt;&lt;br/&gt;
  Test&lt;br/&gt;
  (fail &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (set! x (int (dec x)))))&lt;/p&gt;

&lt;p&gt;The only change here is that I have wrapped (dec x) form into (int) call.&lt;/p&gt;

&lt;p&gt;I understand that in fact the former code should not work anyway (or at least should not work as I have expected) because (dec) is defined as a call to clojure.lang.Numbers.dec(), which is overloaded for double, long and Object only (in fact, changing :tag int to :tag long in the first example allows the program to compile).  However, the error message is completely uninformative and misleading; it also looks like that it is a consequence of compiler error. It is also not a problem of this concrete example; I found this error in more complex interface method implementation where (set!) call was right in the middle of its body.&lt;/p&gt;

&lt;p&gt;I&apos;m using Clojure 1.4.0 and have experienced this problem on Archlinux x86_64 and Windows 7 x86_64.&lt;/p&gt;

&lt;p&gt;Full stack trace of the error, in case it would be helpful:&lt;/p&gt;

&lt;p&gt;java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;.../test.clj:27)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5919)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6508)&lt;br/&gt;
	at clojure.lang.Compiler.load(Compiler.java:6952)&lt;br/&gt;
	at clojure.lang.Compiler.loadFile(Compiler.java:6912)&lt;br/&gt;
	at clojure.lang.RT$3.invoke(RT.java:307)&lt;br/&gt;
	at test$eval3224.invoke(NO_SOURCE_FILE:43)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6511)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6477)&lt;br/&gt;
	at clojure.core$eval.invoke(core.clj:2797)&lt;br/&gt;
	at clojure.main$repl$read_eval_print__6405.invoke(main.clj:245)&lt;br/&gt;
	at clojure.main$repl$fn__6410.invoke(main.clj:266)&lt;br/&gt;
	at clojure.main$repl.doInvoke(main.clj:266)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:421)&lt;br/&gt;
	at clojure.main$repl_opt.invoke(main.clj:332)&lt;br/&gt;
	at clojure.main$main.doInvoke(main.clj:428)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:397)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:411)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
	at clojure.lang.Var.applyTo(Var.java:532)&lt;br/&gt;
	at clojure.main.main(main.java:37)&lt;br/&gt;
Caused by: java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack&lt;br/&gt;
	at java.lang.Class.forName0(Native Method)&lt;br/&gt;
	at java.lang.Class.forName(Class.java:264)&lt;br/&gt;
	at clojure.lang.RT.classForName(RT.java:2039)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:957)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:736)&lt;br/&gt;
	at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2473)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	... 45 more&lt;/p&gt;</description>
                <environment>Archlinux x86_64, Windows 7 x86_64</environment>
            <key id="15905">CLJ-1133</key>
            <summary>Certain actions on mutable fields in deftype lead to very strange error messages</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dpx-infinity">Vladimir Matveev</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Dec 2012 13:48:31 -0600</created>
                <updated>Wed, 19 Dec 2012 01:20:28 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30255" author="dpx-infinity" created="Tue, 18 Dec 2012 13:51:17 -0600"  >&lt;p&gt;Shouldn&apos;t have set major priority; but I cannot edit issue again &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30263" author="jafingerhut" created="Wed, 19 Dec 2012 01:20:28 -0600"  >&lt;p&gt;Reduced priority to minor, since ticket creator could not do so themselves.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>
</channel>
</rss>