Hello, I faced a problem with usage of force_gimple_operand function for specific tree. I have a TARGET_MEM_REF tree node whose address I want to pass as argument to the function call. I use build_fold_addr_expr to get address tree and then pass it to force_gimple_operand which generates strange sequence of statements.
Original mem ref: MEM[base: arr_5, index: ivtmp.130_22, step: 8, offset: 0B] build_fold_addr_expr result: &MEM[base: dirlist_5, index: ivtmp.130_22, step: 8, offset: 0B] force_gimple_operand result: D.5638_65 = MEM[base: dirlist_5, index: ivtmp.130_22, step: 8, offset: 0B]; D.5639_66 = D.5638_65; D.5640_67 = D.5639_66; D.5642_68 = D.5640_67; D.5641_69 = &D.5642_68; Code produced by force_gimple_operand is incorrect, has changed semantics compared to original tree and fails later at gimple verification. Do I use wrong interfaces? Thanks Ilya