[PATCH, revised]: Track uninitialized variables

Caroline Tice ctice@apple.com
Mon Jul 16 16:40:00 GMT 2007


I am working on this and will try to have a fix soon.

-- Caroline Tice
ctice@apple.com

On Jul 16, 2007, at 6:26 AM, Richard Guenther wrote:

> On 11 Jul 2007 07:43:28 -0700, Ian Lance Taylor <iant@google.com>  
> wrote:
>> Caroline Tice <ctice@apple.com> writes:
>>
>> >   static dw_loc_descr_ref
>> > ! one_reg_loc_descriptor (unsigned int regno, enum  
>> var_init_status initialized)
>> >   {
>> > +   dw_loc_descr_ref reg_loc_descr;
>> >     if (regno <= 31)
>> > !     reg_loc_descr = new_loc_descr (DW_OP_reg0 + regno, 0, 0);
>> >     else
>> > !     reg_loc_descr =  new_loc_descr (DW_OP_regx, regno, 0);
>>
>> Extraneous space after '='.
>>
>>
>> > *************** multiple_reg_loc_descriptor (rtx rtl, rt
>> > *** 8707,8713 ****
>> >       {
>> >         dw_loc_descr_ref t;
>> >
>> > !       t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg));
>> >         add_loc_descr (&loc_result, t);
>> >         add_loc_descr_op_piece (&loc_result, size);
>> >         ++reg;
>> > --- 8731,8738 ----
>> >       {
>> >         dw_loc_descr_ref t;
>> >
>> > !       t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
>> > !                                   STATUS_UNINITIALIZED);
>> >         add_loc_descr (&loc_result, t);
>> >         add_loc_descr_op_piece (&loc_result, size);
>> >         ++reg;
>>
>> You should be passing STATUS_INITIALIZED here, not
>> STATUS_UNINITIALIZED.
>>
>>
>> > + /* Possible initialization status of a variable.   When requested
>> > +    by the user, this information is tracked and recorded in the  
>> DWARF
>> > +    debug information, along with the variable's location.  */
>> > + enum var_init_status
>> > + {
>> > +   STATUS_UNKNOWN,
>> > +   STATUS_UNINITIALIZED,
>> > +   STATUS_INITIALIZED
>> > + };
>>
>> I'm sorry to do this to you, but these enum constant names are too
>> generic.  Please use something like VAR_INIT_STATUS_UNKNOWN, etc.
>>
>>
>> > +   if (!(flag_var_tracking_uninit))
>> > +     initialized = STATUS_INITIALIZED;
>>
>> Remove the extraneous parentheses.
>>
>>
>> > *************** emit_note_insn_var_location (void **varp
>> > *** 2472,2480 ****
>> >         parallel = gen_rtx_PARALLEL (VOIDmode,
>> >                                  gen_rtvec_v (n_var_parts, loc));
>> >         NOTE_VAR_LOCATION (note) = gen_rtx_VAR_LOCATION  
>> (VOIDmode, var->decl,
>> > !                                                    parallel);
>> >       }
>> >
>> >     htab_clear_slot (changed_variables, varp);
>> >
>> >     /* When there are no location parts the variable has been  
>> already
>> > --- 2724,2735 ----
>> >         parallel = gen_rtx_PARALLEL (VOIDmode,
>> >                                  gen_rtvec_v (n_var_parts, loc));
>> >         NOTE_VAR_LOCATION (note) = gen_rtx_VAR_LOCATION  
>> (VOIDmode, var->decl,
>> > !                                                    parallel,
>> > !                                                    (int)  
>> initialized);
>> >       }
>> >
>> > +   NOTE_VAR_LOCATION_STATUS (note) = (int) initialized;
>>
>> Setting NOTE_VAR_LOCATION_STATUS here is redundant with passing
>> initialized to gen_rtx_VAR_LOCATION.  You should either remove this
>> and fix the one case of gen_rtx_VAR_LOCATION to which you pass 0
>> rather than (int) initialized, or you should pass 0 in all cases to
>> gen_rtx_VAR_LOCATION.
>>
>>
>> The patch is OK with those changes.
>>
>> Thanks, and sorry for the slow review.
>
> This patch breaks bootstrap on ia64.  See PR32746.
>
> Richard.



More information about the Gcc-patches mailing list