[vmkit-commits] [vmkit] r180375 - Fixed bug in release mode. Optimizer was reusing a local variable stack space because it does not know that it is visible from outside the function.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:04:41 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:02:56 2013
New Revision: 180375

URL: http://llvm.org/viewvc/llvm-project?rev=180375&view=rev
Log:
Fixed bug in release mode. Optimizer was reusing a local variable stack space because it does not know that it is visible from outside the function.
(cherry picked from commit dbf965c3cab131d6ddec315b4f89023c0a65227a)

Modified:
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180375&r1=180374&r2=180375&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:02:56 2013
@@ -335,22 +335,29 @@ UserClass* JnjvmBootstrapLoader::interna
   return (UserClass*)cl;
 }
 
-UserClass* JnjvmClassLoader::internalLoad(const UTF8* name, bool doResolve,
-                                          JavaString* strName) {
+UserCommonClass* JnjvmClassLoader::internalLoadCreateClass(const UTF8* name, JavaString* strName)
+{
   JavaObject* obj = 0;
   llvm_gcroot(strName, 0);
   llvm_gcroot(obj, 0);
+
+  UserClass* forCtp = loadClass;
+  if (strName == NULL) {
+    strName = JavaString::internalToJava(name, vm);
+  }
+
+  obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader, &strName);
+  return JavaObjectClass::getClass(((JavaObjectClass*)obj));
+}
+
+UserClass* JnjvmClassLoader::internalLoad(const UTF8* name, bool doResolve,
+                                          JavaString* strName) {
+  llvm_gcroot(strName, 0);
   
   UserCommonClass* cl = lookupClass(name);
   
   if (!cl) {
-    UserClass* forCtp = loadClass;
-    if (strName == NULL) {
-      strName = JavaString::internalToJava(name, vm);
-    }
-    obj = loadClassMethod->invokeJavaObjectVirtual(vm, forCtp, javaLoader,
-                                                   &strName);
-    cl = JavaObjectClass::getClass(((JavaObjectClass*)obj));
+    cl = internalLoadCreateClass(name, strName);
   }
   
   if (cl && doResolve && cl->isClass()) {

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180375&r1=180374&r2=180375&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 12:02:56 2013
@@ -69,7 +69,9 @@ private:
   ///
   virtual UserClass* internalLoad(const UTF8* utf8, bool doResolve,
                                   JavaString* strName);
-  
+
+  UserCommonClass* internalLoadCreateClass(const UTF8* name, JavaString* strName);
+
   /// internalConstructType - Hashes a Typedef, an internal representation of
   /// a class still not loaded.
   ///





More information about the vmkit-commits mailing list