Skip to content

Commit b49ab33

Browse files
committed
fix issue open64-compiler#41 for WHIRL2llvm
Actually, the argument name are added a sequence number in Syn_name_w_modifier. In this case, the real llvm argument name is 'm%0; rather than 'm'. 1. The w2ll will crash if compile the code like that: ``` typedef struct quantum_matrix_struct { int rows; int cols; } quantum_matrix; void quantum_print_matrix(quantum_matrix m) { printf("m.rows;%d\n", m.rows); } ``` 2. Error Log: ``` Get_arg_by_name: get argument m failed ``` Signed-off-by: Zhijin Zeng <[email protected]>
1 parent 7234c9c commit b49ab33

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

osprey/ir_tools/whirl2llvm.cxx

+2-2
Original file line numberDiff line numberDiff line change
@@ -4197,7 +4197,7 @@ WHIRL2llvm::WN2llvmSymAct(WN *wn, ACTION act, LVVAL *rhs)
41974197
arg_addr = Get_locvar(reg_name.c_str()).second;
41984198
if (arg_addr == NULL) { // unlikely reachable condition in .O file
41994199
// create a.addr for argument a
4200-
auto lv_arg = Get_arg_by_name(varname);
4200+
auto lv_arg = Get_arg_by_name(var.c_str());
42014201
if (act == ACT_LD) {
42024202
if (Mload_ty(ty_idx)) {
42034203
arg_addr = Create_locvar(TY_mtype(parmtype), parmtype, nullptr, reg_name.c_str()).second;
@@ -4267,7 +4267,7 @@ WHIRL2llvm::WN2llvmSymAct(WN *wn, ACTION act, LVVAL *rhs)
42674267
store->setAlignment(llvm::Align(TY_align(WN_ty(wn))));
42684268
return store;
42694269
} else {
4270-
LVVAL *arg = Get_arg_by_name(varname);
4270+
LVVAL *arg = Get_arg_by_name(var.c_str());
42714271
arg = HandleStoreDifferentType(wn, arg, arg_addr->getAllocatedType(), is_signed);
42724272
auto store = Lvbuilder()->CreateStore(arg, arg_addr);
42734273
store->setAlignment(llvm::Align(TY_align(WN_ty(wn))));

0 commit comments

Comments
 (0)