[mono][llvm] Fix a crash when emitting P_OBJC_GET_SELECTOR opcodes. (#78215)
authorZoltan Varga <vargaz@gmail.com>
Mon, 14 Nov 2022 08:46:21 +0000 (03:46 -0500)
committerGitHub <noreply@github.com>
Mon, 14 Nov 2022 08:46:21 +0000 (03:46 -0500)
Fixes https://github.com/dotnet/runtime/issues/78154.

src/mono/mono/mini/mini-llvm.c

index 0913606..1feeedb 100644 (file)
@@ -7657,7 +7657,8 @@ MONO_RESTORE_WARNING
                        if (!var) {
                                LLVMValueRef indexes [16];
 
-                               LLVMValueRef name_var = LLVMAddGlobal (ctx->lmodule, LLVMArrayType (LLVMInt8Type (), (unsigned int)(strlen (name) + 1)), "@OBJC_METH_VAR_NAME_");
+                               LLVMTypeRef name_var_type = LLVMArrayType (LLVMInt8Type (), (unsigned int)(strlen (name) + 1));
+                               LLVMValueRef name_var = LLVMAddGlobal (ctx->lmodule, name_var_type, "@OBJC_METH_VAR_NAME_");
                                LLVMSetInitializer (name_var, mono_llvm_create_constant_data_array ((const uint8_t*)name, (int)(strlen (name) + 1)));
                                LLVMSetLinkage (name_var, LLVMPrivateLinkage);
                                LLVMSetSection (name_var, "__TEXT,__objc_methname,cstring_literals");
@@ -7668,7 +7669,7 @@ MONO_RESTORE_WARNING
                                indexes [0] = const_int32 (0);
                                indexes [1] = const_int32 (0);
 #if LLVM_API_VERSION >= 1400
-                               LLVMSetInitializer (ref_var, LLVMConstGEP2 (var_type, name_var, indexes, 2));
+                               LLVMSetInitializer (ref_var, LLVMConstGEP2 (name_var_type, name_var, indexes, 2));
 #else
                                LLVMSetInitializer (ref_var, LLVMConstGEP (name_var, indexes, 2));
 #endif