The indirect function argument is in alloca address space in LLVM IR. However,
during Clang codegen for C++, the address space of indirect function argument
should match its address space in the source code, even for indirect argument.i.e., default addr space, even
for indirect argument. This is because destructor of the indirect argument may be called in the caller
function, and address ofbe called in the indirect argument may be takencaller function, in either caseand address of the indirect argument may be
taken, in either case the indirect function argument is expected to be in its original address space,default
addr space, not the alloca address space.
Therefore, the indirect function argument should be mapped to the temp var
casted to default address space. The caller will cast it to alloca addr space
when passing it to the callee. In the callee, the argument is also casted to the
default address space and used.