================ @@ -700,10 +700,13 @@ class MSBuiltin<string name> { //===--------------- Variable Argument Handling Intrinsics ----------------===// // -def int_vastart : DefaultAttrsIntrinsic<[], [llvm_ptr_ty], [], "llvm.va_start">; -def int_vacopy : DefaultAttrsIntrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], [], - "llvm.va_copy">; -def int_vaend : DefaultAttrsIntrinsic<[], [llvm_ptr_ty], [], "llvm.va_end">; +def int_vastart : DefaultAttrsIntrinsic<[], + [llvm_anyptr_ty], [], "llvm.va_start">; +def int_vacopy : DefaultAttrsIntrinsic<[], + [llvm_anyptr_ty, llvm_anyptr_ty], [], + "llvm.va_copy">; ---------------- efriedma-quic wrote:
clang semantic analysis currently forces both the source and destination of va_copy to the type __builtin_va_list_ref, whatever that is. So clang would never emit va_copy with different pointer types. (Some other frontend could theoretically emit such operations, but it's hard for me to imagine it being useful.) In theory, you could try to optimize the address-spaces involved in a va_copy operation... but there's not really much point to trying to optimize va_copy before you lower it. https://github.com/llvm/llvm-project/pull/85460 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits