[prev in list] [next in list] [prev in thread] [next in thread] 

List:       soot-list
Subject:    [Soot-list] java.lang.VerifyError: (class: org/apache/lucene/util/CloseableThreadLocal, method: set 
From:       Nikhil <cs16m028 () smail ! iitm ! ac ! in>
Date:       2018-05-15 5:29:31
Message-ID: 743b74da-7fbc-4f67-8802-be364a414d71 () googlegroups ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi,

for my work I need to replace *InterfaceInvokeExpr* with *VirtualInvokeExpr* 
using same receiver and arguments.

e.g) if Map.put(K,V) is called in program I want to change it to 
HashMap.put(K,V)

Please note that in this program Map is implemented using only HashMap.
Map<k,v> map = new HashMap<>();

The way I am trying to achieve it is like this:

if(unit instanceof InvokeStmt) 
{
    InvokeExpr ie = ((InvokeStmt) u).getInvokeExpr();
    if(ie instanceof InterfaceInvokeExpr)
    {
    SootMethod sM = Scene.v().getMethod("method signature here"); //Here I 
am getting the method successfully
    InvokeExpr vi = Jimple.v().newVirtualInvokeExpr(local,sM.makeRef(),ie.
getArgs())
    }
}



After that I replace it successfully.

But after replacing I am getting java.lang.VerifyError: (class: 
org/apache/lucene/util/CloseableThreadLocal, method: set signature: 
(Ljava/lang/Object;)V) Incompatible object argument for function call

After closely reviewing class org.apache.lucene.util.CloseableThreadLocal I 
found that the replaced VirtualInvokeExpr does not use same arguments as 
InterfaceInvokeExpr.

InterfaceInvokeExpr:

        $r1 = new java.lang.ThreadLocal;

        $r9 = r0.<org.apache.lucene.util.CloseableThreadLocal: java.util.Map 
hardRefs>;

        $r10 = staticinvoke <java.lang.Thread: java.lang.Thread 
currentThread()>();

        interfaceinvoke $r9.<java.util.Map: java.lang.Object put(java.lang.
Object,java.lang.Object)>($r10, r1);


        
VirtualInvokeExpr:

        r0 := @this: org.apache.lucene.util.CloseableThreadLocal;
        
        $r4 = r12.<org.apache.lucene.util.CloseableThreadLocal: java.util.
Map hardRefs>;

        $r5 = staticinvoke <java.lang.Thread: java.lang.Thread currentThread
()>();

        r16 = (java.util.HashMap) $r4;

        virtualinvoke r16.<java.util.HashMap: java.lang.Object put(java.lang
.Object,java.lang.Object)>($r5, r0);



Here r0 and r1 have different type I think that is why the error is 
occuring.
Any guesses why this is happening? Am I setting the arguments for the 
function call incorrectly?

Full error message for the reference:
=======================================================
TamiFlex Play-In Agent Version 2.0.3
Loaded properties from /home/nikkhil/.tamiflex/pia.properties
=======================================================
===== DaCapo 9.12-MR1 luindex starting =====
java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.dacapo.harness.Luindex.iterate(Luindex.java:66)
    at org.dacapo.harness.Benchmark.run(Benchmark.java:187)
    at org.dacapo.harness.TestHarness.runBenchmark(TestHarness.java:199)
    at org.dacapo.harness.TestHarness.main(TestHarness.java:152)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at Harness.main(Unknown Source)
Caused by: java.lang.VerifyError: (class: org/apache/lucene/util/
CloseableThreadLocal, method: set signature: (Ljava/lang/Object;)V) 
Incompatible object argument for function call
    at org.apache.lucene.analysis.Analyzer.<init>(Analyzer.java:50)
    at org.apache.lucene.analysis.standard.StandardAnalyzer.<init>(
StandardAnalyzer.java:102)
    at org.apache.lucene.analysis.standard.StandardAnalyzer.<init>(
StandardAnalyzer.java:93)
    at org.dacapo.luindex.Index.main(Index.java:64)
    ... 13 more




Thanks,
--Nikhil

[Attachment #5 (text/html)]

<div dir="ltr"><br>Hi,<br><br>for my work I need to replace \
<b>InterfaceInvokeExpr</b> with <b>VirtualInvokeExpr</b> using same receiver and \
arguments.<br><br>e.g) if Map.put(K,V) is called in program I want to change it to \
HashMap.put(K,V)<br><br>Please note that in this program Map is implemented using \
only HashMap.<br>Map&lt;k,v&gt; map = new HashMap&lt;&gt;();<br><br>The way I am \
trying to achieve it is like this:<br><br><div style="background-color: rgb(250, 250, \
250); border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; \
overflow-wrap: break-word;" class="prettyprint"><code class="prettyprint"><div \
class="subprettyprint"><span style="color: #008;" \
class="styled-by-prettify">if</span><span style="color: #660;" \
class="styled-by-prettify">(</span><span style="color: #000;" \
class="styled-by-prettify">unit </span><span style="color: #008;" \
class="styled-by-prettify">instanceof</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #606;" \
class="styled-by-prettify">InvokeStmt</span><span style="color: #660;" \
class="styled-by-prettify">)</span><span style="color: #000;" \
class="styled-by-prettify"> <br></span><span style="color: #660;" \
class="styled-by-prettify">{</span><span style="color: #000;" \
class="styled-by-prettify"><br>      </span><span style="color: #606;" \
class="styled-by-prettify">InvokeExpr</span><span style="color: #000;" \
class="styled-by-prettify"> ie </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #660;" \
class="styled-by-prettify">((</span><span style="color: #606;" \
class="styled-by-prettify">InvokeStmt</span><span style="color: #660;" \
class="styled-by-prettify">)</span><span style="color: #000;" \
class="styled-by-prettify"> u</span><span style="color: #660;" \
class="styled-by-prettify">).</span><span style="color: #000;" \
class="styled-by-prettify">getInvokeExpr</span><span style="color: #660;" \
class="styled-by-prettify">();</span><span style="color: #000;" \
class="styled-by-prettify"><br>      </span><span style="color: #008;" \
class="styled-by-prettify">if</span><span style="color: #660;" \
class="styled-by-prettify">(</span><span style="color: #000;" \
class="styled-by-prettify">ie </span><span style="color: #008;" \
class="styled-by-prettify">instanceof</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #606;" \
class="styled-by-prettify">InterfaceInvokeExpr</span><span style="color: #660;" \
class="styled-by-prettify">)</span><span style="color: #000;" \
class="styled-by-prettify"><br>      </span><span style="color: #660;" \
class="styled-by-prettify">{</span><span style="color: #000;" \
class="styled-by-prettify"><br>      </span><span style="color: #606;" \
class="styled-by-prettify">SootMethod</span><span style="color: #000;" \
class="styled-by-prettify"> sM </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #606;" \
class="styled-by-prettify">Scene</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">v</span><span style="color: #660;" \
class="styled-by-prettify">().</span><span style="color: #000;" \
class="styled-by-prettify">getMethod</span><span style="color: #660;" \
class="styled-by-prettify">(</span><span style="color: #080;" \
class="styled-by-prettify">&quot;method signature here&quot;</span><span \
style="color: #660;" class="styled-by-prettify">);</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #800;" \
class="styled-by-prettify">//Here I am getting the method successfully</span><span \
style="color: #000;" class="styled-by-prettify"><br>      </span><span style="color: \
#606;" class="styled-by-prettify">InvokeExpr</span><span style="color: #000;" \
class="styled-by-prettify"> vi </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #606;" \
class="styled-by-prettify">Jimple</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">v</span><span style="color: #660;" \
class="styled-by-prettify">().</span><span style="color: #000;" \
class="styled-by-prettify">newVirtualInvokeExpr</span><span style="color: #660;" \
class="styled-by-prettify">(</span><span style="color: #008;" \
class="styled-by-prettify">local</span><span style="color: #660;" \
class="styled-by-prettify">,</span><span style="color: #000;" \
class="styled-by-prettify">sM</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">makeRef</span><span style="color: #660;" \
class="styled-by-prettify">(),</span><span style="color: #000;" \
class="styled-by-prettify">ie</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">getArgs</span><span style="color: #660;" \
class="styled-by-prettify">())</span><span style="color: #000;" \
class="styled-by-prettify"><br>      </span><span style="color: #660;" \
class="styled-by-prettify">}</span><span style="color: #000;" \
class="styled-by-prettify"><br></span><span style="color: #660;" \
class="styled-by-prettify">}</span><span style="color: #000;" \
class="styled-by-prettify"><br><br></span></div></code></div><br><br>After that I \
replace it successfully.<br><br>But after replacing I am getting \
java.lang.VerifyError: (class: org/apache/lucene/util/CloseableThreadLocal, method: \
set signature: (Ljava/lang/Object;)V) Incompatible object argument for function \
call<br><br>After closely reviewing class org.apache.lucene.util.CloseableThreadLocal \
I found that the replaced VirtualInvokeExpr does not use same arguments as \
InterfaceInvokeExpr.<br><br><div style="background-color: rgb(250, 250, 250); \
border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; \
overflow-wrap: break-word;" class="prettyprint"><code class="prettyprint"><div \
class="subprettyprint"><span style="color: #606;" \
class="styled-by-prettify">InterfaceInvokeExpr</span><span style="color: #660;" \
class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"><br><br>            $r1 </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #008;" \
class="styled-by-prettify">new</span><span style="color: #000;" \
class="styled-by-prettify"> java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">ThreadLocal</span><span style="color: #660;" \
class="styled-by-prettify">;</span><span style="color: #000;" \
class="styled-by-prettify"><br><br>            $r9 </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> r0</span><span style="color: #660;" \
class="styled-by-prettify">.&lt;</span><span style="color: #000;" \
class="styled-by-prettify">org</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">apache</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lucene</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">util</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">CloseableThreadLocal</span><span style="color: #660;" \
class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"> java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">util</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Map</span><span style="color: #000;" \
class="styled-by-prettify"> hardRefs</span><span style="color: #660;" \
class="styled-by-prettify">&gt;;</span><span style="color: #000;" \
class="styled-by-prettify"><br><br>            $r10 </span><span style="color: #660;" \
class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> staticinvoke </span><span style="color: #660;" \
class="styled-by-prettify">&lt;</span><span style="color: #000;" \
class="styled-by-prettify">java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Thread</span><span style="color: #660;" \
class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"> java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Thread</span><span style="color: #000;" \
class="styled-by-prettify"> currentThread</span><span style="color: #660;" \
class="styled-by-prettify">()&gt;();</span><span style="color: #000;" \
class="styled-by-prettify"><br><br>            interfaceinvoke $r9</span><span \
style="color: #660;" class="styled-by-prettify">.&lt;</span><span style="color: \
#000;" class="styled-by-prettify">java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">util</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Map</span><span style="color: #660;" \
class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"> java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Object</span><span style="color: #000;" \
class="styled-by-prettify"> put</span><span style="color: #660;" \
class="styled-by-prettify">(</span><span style="color: #000;" \
class="styled-by-prettify">java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Object</span><span style="color: #660;" \
class="styled-by-prettify">,</span><span style="color: #000;" \
class="styled-by-prettify">java</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lang</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">Object</span><span style="color: #660;" \
class="styled-by-prettify">)&gt;(</span><span style="color: #000;" \
class="styled-by-prettify">$r10</span><span style="color: #660;" \
class="styled-by-prettify">,</span><span style="color: #000;" \
class="styled-by-prettify"> r1</span><span style="color: #660;" \
class="styled-by-prettify">);</span></div></code></div><br><br>               \
<br><div style="background-color: rgb(250, 250, 250); border-color: rgb(187, 187, \
187); border-style: solid; border-width: 1px; overflow-wrap: break-word;" \
class="prettyprint"><code class="prettyprint"><div class="subprettyprint"><span \
style="color: #606;" class="styled-by-prettify">VirtualInvokeExpr</span><span \
style="color: #660;" class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"><br><br>            r0 </span><span style="color: #660;" \
class="styled-by-prettify">:=</span><span style="color: #000;" \
class="styled-by-prettify"> </span><span style="color: #066;" \
class="styled-by-prettify">@this</span><span style="color: #660;" \
class="styled-by-prettify">:</span><span style="color: #000;" \
class="styled-by-prettify"> org</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">apache</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lucene</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">util</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #606;" \
class="styled-by-prettify">CloseableThreadLocal</span><span style="color: #660;" \
class="styled-by-prettify">;</span><span style="color: #000;" \
class="styled-by-prettify"><br>            <br>            $r4 </span><span \
style="color: #660;" class="styled-by-prettify">=</span><span style="color: #000;" \
class="styled-by-prettify"> r12</span><span style="color: #660;" \
class="styled-by-prettify">.&lt;</span><span style="color: #000;" \
class="styled-by-prettify">org</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">apache</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">lucene</span><span style="color: #660;" \
class="styled-by-prettify">.</span><span style="color: #000;" \
class="styled-by-prettify">util</span><span style="color: #660;" \



_______________________________________________
Soot-list mailing list
Soot-list@CS.McGill.CA
https://mailman.CS.McGill.CA/mailman/listinfo/soot-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic