Hi, After some more study on __builtin_clear_padding and the corresponding testing cases. And also considered both Richard Biener and Richard Sandiford’s previous suggestion to use __builtin_clear_padding. I have the following thought on the paddings initialization:
****** We can insert a call to __builtin_clear_padding (&decl, 0) to all the variables that need to be Auto-initialized during gimplification phase. This include two places: A. If the auto-variable does not have an explicit initializer, and we need to add a call to .DEFERRED_INIT. We always add a call to __builtin_clear_padding following this .DEFERRED_INIT call. structure_type temp; temp = .DEFERRED_INIT (); __builtin_clear_padding (&temp, 0); NOTE: ****** If temp has a type without paddings, then __builtin_clear_padding will be lowered to a gimple_nop automatically. ****** regardless with zero or pattern init, the paddings will be always initialized to ZEROes, which is compatible with CLANG. B. If the auto-variable does HAVE an explicit initializer, then we will add the call to __builtin_clear_padding In the beginning of “gimplify_init_constructor”. structure_type temp = {…..}; __builtin_clear_padding (&temp, 0); Expand_the_constructor; NOTE: ****** if temp has a type without padding, the call to __builtin_clear_padding will be lowed to gimple_nop; ****** padding will be always initialized to ZEROes. ******the major benefit with this approach are: 1. Padding initialization will be compatible with CLANG; 2. Implemenation will be much more simple and consistent; My questions: 1. What do you think of this approach? 2. During implementation, if I want to add the following routine: /* Generate padding initialization for automatic vairable DECL. C guarantees that brace-init with fewer initializers than members aggregate will initialize the rest of the aggregate as-if it were static initialization. In turn static initialization guarantees that padding is initialized to zero. So, we always initialize paddings to zeroes regardless INIT_TYPE. To do the padding initialization, we insert a call to __BUILTIN_CLEAR_PADDING (&decl, 0). */ static void gimple_add_padding_init_for_auto_var (tree decl, gimple_seq *seq_p) { ?????? how to build a addr_of_decl tree node??? tree addr_of_decl = …. gimple *call = gimple_build_call (builtin_decl_implicit (BUILT_IN_CLEAR_PADDING), 2, addr_of_decl, build_zero_cst (TREE_TYPE (decl)); gimplify_seq_add_stmt (seq_p, call); } I need help on how to build “addr_of_decl” in the above routine. Thanks a lot for your help. Qing