Skip to content

Commit

Permalink
feat: make java/lang/Throwable compile
Browse files Browse the repository at this point in the history
  • Loading branch information
zskamljic committed Nov 21, 2024
1 parent 03e2d29 commit 1d17d1d
Show file tree
Hide file tree
Showing 41 changed files with 147 additions and 123 deletions.
2 changes: 1 addition & 1 deletion src/main/java/zskamljic/wjvern/Blacklist.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private static boolean isBlacklistedForClass(MethodModel method) {
public static boolean hasUnsupportedType(MethodRefEntry method) {
return Stream.concat(Stream.of(method.typeSymbol().returnType()), method.typeSymbol().parameterList().stream())
.map(c -> c.packageName().replace(".", "/") + "/" + c.displayName())
.anyMatch(Blacklist::isSupportedClass);
.allMatch(Blacklist::isSupportedClass);
}

record Items(BlacklistClass any, Map<String, BlacklistClass> classes) {
Expand Down
17 changes: 4 additions & 13 deletions src/main/java/zskamljic/wjvern/llir/ClassBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ private void handleStaticRequirements(IrClassGenerator classGenerator, List<Stri

classGenerator.injectCode("""
%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand Down Expand Up @@ -196,7 +195,7 @@ private void handleClassEntry(
generateClass(classEntry, generatedClasses, registry, globalInitializer);
var dependent = Utils.unwrapType(classEntry);
if (!dependent.isPrimitive()) {
classGenerator.addRequiredType(new LlvmType.Declared(typeName(dependent)));
classGenerator.addRequiredType(new LlvmType.Declared(Utils.typeName(dependent)));
}
Optional.ofNullable(generatedClasses.get(classEntry.name().stringValue()))
.flatMap(IrClassGenerator::getExceptionDefinition)
Expand Down Expand Up @@ -253,7 +252,7 @@ private void generateClass(
var type = Utils.unwrapType(entry);
if (type.isPrimitive()) return;

var name = typeName(type);
var name = Utils.typeName(type);
if (generatedClasses.containsKey(name)) return;

ClassBuilder classBuilder;
Expand Down Expand Up @@ -292,25 +291,17 @@ private void generateClass(
classBuilder.generate(generatedClasses, registry, globalInitializer);
}

private String typeName(ClassDesc type) {
var className = type.packageName().replace('.', '/');
if (!className.isEmpty()) {
className += "/";
}
return className + type.displayName();
}

private Optional<ClassModel> loadClass(ClassEntry classEntry) {
var type = Utils.unwrapType(classEntry);
if (type.isPrimitive()) return Optional.empty();
return loadClass(typeName(type));
return loadClass(Utils.typeName(type));
}

private Optional<ClassModel> loadClassStdlibAll(ClassEntry classEntry) {
var type = Utils.unwrapType(classEntry);
if (type.isPrimitive()) return Optional.empty();

return Optional.of(resolver.resolve(typeName(type)));
return Optional.of(resolver.resolve(Utils.typeName(type)));
}

private Optional<ClassModel> loadClass(String className) {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/zskamljic/wjvern/llir/IrClassGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.lang.classfile.constantpool.ClassEntry;
import java.lang.classfile.constantpool.MethodRefEntry;
import java.lang.classfile.instruction.InvokeInstruction;
import java.lang.constant.ClassDesc;
import java.lang.reflect.AccessFlag;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
Expand Down Expand Up @@ -144,6 +145,16 @@ public void addMethodDependency(MethodRefEntry method, boolean isStatic) {
if (method.owner().name().stringValue().equals(className)) return;
if (Blacklist.hasUnsupportedType(method)) return;

method.typeSymbol()
.parameterList()
.stream()
.distinct()
.filter(Predicate.not(ClassDesc::isArray))
.filter(Predicate.not(ClassDesc::isPrimitive))
.map(Utils::typeName)
.map(LlvmType.Declared::new)
.forEach(this::addRequiredType);

methodDependencies.add(Utils.methodDeclaration(method, isStatic));
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/zskamljic/wjvern/llir/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ public static String escape(String name) {
return name;
}

public static String typeName(ClassDesc type) {
var className = type.packageName().replace('.', '/');
if (!className.isEmpty()) {
className += "/";
}
return className + type.displayName();
}

public static String methodName(String parent, MethodModel method) {
return escape(parent + "_" + method.methodName() + method.methodTypeSymbol().descriptorString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ public String toString() {
builder.append(type).append(" = type { ");

var fieldsString = fields.stream()
.map(String::valueOf)
//.map(String::valueOf)
.map(f -> f instanceof LlvmType.Pointer ? "ptr" : f.toString())
.collect(Collectors.joining(", "));
builder.append(fieldsString);

Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/supported_classes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ java/lang/Integer
java/lang/Number
java/lang/Object
java/lang/String
java/lang/Throwable
java/lang/Void
java/io/Serializable
java/util/List
java/util/function/Supplier
42 changes: 41 additions & 1 deletion src/main/resources/unsupported_functions.json
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,49 @@
"lastIndexOfLatin1"
]
},
"java/lang/Throwable": {
"byName": [
"addSuppressed",
"getSuppressed",
"initCause",
"lockedPrintStackTrace",
"printEnclosedStackTrace",
"printStackTrace",
"readObject",
"setStackTrace",
"validateSuppressedExceptionsList",
"getOurStackTrace",
"writeObject",
"getStackTrace",
"writeObject",
"lockedPrintStackTrace",
"printEnclosedStackTrace",
"fillInStackTrace"
],
"bySignature": [
{
"name": "<init>",
"signatures": [
"()V",
"(Ljava/lang/String;)V",
"(Ljava/lang/String;Ljava/lang/Throwable;)V",
"(Ljava/lang/Throwable;)V",
"(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V"
]
}
]
},
"java/util/List": {
"byName": [
"spliterator"
"copyOf",
"of",
"sort",
"spliterator",
"getFirst",
"getLast",
"removeFirst",
"removeLast",
"reversed"
]
}
}
5 changes: 2 additions & 3 deletions src/test/resources/BasicMath.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%BasicMath = type { %BasicMath_vtable_type*, %java_TypeInfo* }
Expand All @@ -17,7 +17,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%"java/lang/String_vtable_type" = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)*, i32(%"java/lang/String"*)*, i1(%"java/lang/String"*)*, %"java/lang/String"(%"java/lang/String"*)*, i8(%"java/lang/String"*)*, %java_Array(%"java/lang/String"*)*, i1(%"java/lang/String"*)*, %"java/lang/String"(%"java/lang/String"*, %"java/lang/invoke/MethodHandles$Lookup")*, %"java/lang/Object"(%"java/lang/String"*, %"java/lang/invoke/MethodHandles$Lookup")* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -32,7 +31,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/Comparisons.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%Comparisons = type { %Comparisons_vtable_type*, %java_TypeInfo* }
Expand All @@ -17,7 +17,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%Comparisons_vtable_type = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -32,7 +31,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/ConstructorAndInstanceMethods.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%ConstructorAndInstanceMethods = type { %ConstructorAndInstanceMethods_vtable_type*, %java_TypeInfo* }
Expand All @@ -17,7 +17,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%ConstructorAndInstanceMethods_vtable_type = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -32,7 +31,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/Conversions.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%Conversions = type { %Conversions_vtable_type*, %java_TypeInfo* }
Expand All @@ -17,7 +17,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%Conversions_vtable_type = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -32,7 +31,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/CustomException.ll
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%"java/lang/Exception" = type { ptr, ptr }
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%CustomException = type { %CustomException_vtable_type*, %java_TypeInfo*, i32 }
Expand All @@ -12,7 +12,6 @@ declare void @"java/lang/Exception_<init>()V"(%"java/lang/Exception"*)
%CustomException_vtable_type = type { i32(%CustomException*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -25,7 +24,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
i32(%CustomException*)* @"CustomException_getCode()I"
}

@typeInfo_types = private global [1 x i32] [i32 11]
@typeInfo_types = private global [1 x i32] [i32 13]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 1, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
14 changes: 9 additions & 5 deletions src/test/resources/Exceptions.ll
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%CustomException = type { ptr, ptr, i32 }
%"java/lang/Throwable" = type opaque
%"java/lang/Throwable" = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%Exceptions = type { %Exceptions_vtable_type*, %java_TypeInfo* }
Expand All @@ -20,10 +20,9 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%"java/lang/String_vtable_type" = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)*, i32(%"java/lang/String"*)*, i1(%"java/lang/String"*)*, %"java/lang/String"(%"java/lang/String"*)*, i8(%"java/lang/String"*)*, %java_Array(%"java/lang/String"*)*, i1(%"java/lang/String"*)*, %"java/lang/String"(%"java/lang/String"*, %"java/lang/invoke/MethodHandles$Lookup")*, %"java/lang/Object"(%"java/lang/String"*, %"java/lang/invoke/MethodHandles$Lookup")* }
%Exceptions_vtable_type = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)* }
%CustomException_vtable_type = type { i32(%CustomException*)* }
%"java/lang/Throwable_vtable_type" = type { }
%"java/lang/Throwable_vtable_type" = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)*, %"java/lang/String"(%"java/lang/Throwable"*)*, %"java/lang/String"(%"java/lang/Throwable"*)*, %"java/lang/Throwable"(%"java/lang/Throwable"*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -45,13 +44,18 @@ declare void @__cxa_end_catch()
@CustomException_type_info = constant { ptr, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv117__class_type_infoE, i64 2), ptr @CustomException_type_string }
@PCustomException_type_info = constant { ptr, ptr, i32, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv119__pointer_type_infoE, i64 2), ptr @PCustomException_type_string, i32 0, ptr @CustomException_type_info }

@"java/lang/Throwable_type_string" = constant [22 x i8] c"19java/lang/Throwable\00"
@"Pjava/lang/Throwable_type_string" = constant [23 x i8] c"P19java/lang/Throwable\00"
@"java/lang/Throwable_type_info" = constant { ptr, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv117__class_type_infoE, i64 2), ptr @"java/lang/Throwable_type_string" }
@"Pjava/lang/Throwable_type_info" = constant { ptr, ptr, i32, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv119__pointer_type_infoE, i64 2), ptr @"Pjava/lang/Throwable_type_string", i32 0, ptr @"java/lang/Throwable_type_info" }

@Exceptions_vtable_data = global %Exceptions_vtable_type {
i32(%"java/lang/Object"*)* @"java/lang/Object_hashCode()I",
i1(%"java/lang/Object"*, %"java/lang/Object")* @"java/lang/Object_equals(Ljava/lang/Object;)Z",
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/ExceptionsData.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%CustomException = type { ptr, ptr, i32 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
Expand All @@ -21,7 +21,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%CustomException_vtable_type = type { i32(%CustomException*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand Down Expand Up @@ -49,7 +48,7 @@ declare void @__cxa_end_catch()
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
5 changes: 2 additions & 3 deletions src/test/resources/ForEach.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%"java/lang/Object" = type { ptr, ptr }
%"java/lang/invoke/MethodHandles$Lookup" = type opaque
%"java/lang/String" = type { ptr, ptr, %java_Array*, i8, i32, i1 }
%"java/lang/String" = type { ptr, ptr, ptr, i8, i32, i1 }
%java_Array = type { i32, ptr }
%java_TypeInfo = type { i32, i32*, i32, i32*, ptr }
%ForEach = type { %ForEach_vtable_type*, %java_TypeInfo* }
Expand All @@ -17,7 +17,6 @@ declare void @"java/lang/Object_wait0(J)V"(%"java/lang/Object"*, i64) nounwind
%ForEach_vtable_type = type { i32(%"java/lang/Object"*)*, i1(%"java/lang/Object"*, %"java/lang/Object")*, void(%"java/lang/Object"*)* }

%"java/util/stream/IntStream" = type opaque
%"java/util/function/BiFunction" = type opaque
declare i32 @__gxx_personality_v0(...)
declare i1 @instanceof(ptr,i32)
declare ptr @type_interface_vtable(ptr,i32)
Expand All @@ -32,7 +31,7 @@ declare void @llvm.memset.p0.i64(ptr,i8,i64,i1)
void(%"java/lang/Object"*)* @"java/lang/Object_finalize()V"
}

@typeInfo_types = private global [2 x i32] [i32 10, i32 1]
@typeInfo_types = private global [2 x i32] [i32 12, i32 1]
@typeInfo_interfaces = private global [0 x i32] []
@typeInfo_interface_tables = private global [0 x ptr] []
@typeInfo = private global %java_TypeInfo { i32 2, i32* @typeInfo_types, i32 0, i32* @typeInfo_interfaces, ptr @typeInfo_interface_tables }
Expand Down
Loading

0 comments on commit 1d17d1d

Please sign in to comment.