From df9efdeb4cd09b9ffbc224d23a04894ca9afb81b Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 5 Dec 2015 18:03:45 +0000 Subject: [PATCH] * fixed llvm types for loading the address of a nested routine git-svn-id: trunk@32594 - --- compiler/llvm/nllvmcnv.pas | 2 +- compiler/llvm/nllvmld.pas | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/llvm/nllvmcnv.pas b/compiler/llvm/nllvmcnv.pas index 946c47dec9..2b0542f2b8 100644 --- a/compiler/llvm/nllvmcnv.pas +++ b/compiler/llvm/nllvmcnv.pas @@ -164,7 +164,7 @@ procedure tllvmtypeconvnode.second_proc_to_procvar; if location.loc<>LOC_REFERENCE then internalerror(2015111902); hlcg.g_ptrtypecast_ref(current_asmdata.CurrAsmList, - cpointerdef.getreusable(left.resultdef), + cpointerdef.getreusable(tprocdef(left.resultdef).getcopyas(procvardef,pc_normal)), cpointerdef.getreusable(resultdef), location.reference); end; diff --git a/compiler/llvm/nllvmld.pas b/compiler/llvm/nllvmld.pas index a0ff59103f..5b61094600 100644 --- a/compiler/llvm/nllvmld.pas +++ b/compiler/llvm/nllvmld.pas @@ -90,7 +90,7 @@ procedure tllvmloadnode.pass_generate_code; { on little endian, location.register contains proc and location.registerhi contains self; on big endian, it's the other way around } - tg.gethltemp(current_asmdata.CurrAsmList,resultdef,resultdef.size,tt_normal,href); + tg.gethltemp(current_asmdata.CurrAsmList,pvdef,pvdef.size,tt_normal,href); if target_info.endian=endian_little then begin procreg:=location.register; @@ -110,7 +110,7 @@ procedure tllvmloadnode.pass_generate_code; else selfdef:=cpointerdef.getreusable(left.resultdef); mpref:=href; - hlcg.g_ptrtypecast_ref(current_asmdata.CurrAsmList,cpointerdef.getreusable(resultdef),cpointerdef.getreusable(methodpointertype),mpref); + hlcg.g_ptrtypecast_ref(current_asmdata.CurrAsmList,cpointerdef.getreusable(pvdef),cpointerdef.getreusable(methodpointertype),mpref); hlcg.g_load_reg_field_by_name(current_asmdata.CurrAsmList,cprocvardef.getreusableprocaddr(procdef),trecorddef(methodpointertype),procreg,'proc',mpref); hlcg.g_load_reg_field_by_name(current_asmdata.CurrAsmList,selfdef,trecorddef(methodpointertype),selfreg,'self',mpref); location_reset_ref(location,LOC_REFERENCE,location.size,href.alignment);