On Fri, Jan 25, 2013 at 3:05 PM, Sudakshina Das
<sudakshina1...@gmail.com> wrote:
> On Fri, Jan 25, 2013 at 9:46 AM, Sudakshina Das
> <sudakshina1...@gmail.com> wrote:
>>
>> On Thu, Jan 24, 2013 at 5:15 PM, Richard Biener
>> <richard.guent...@gmail.com> wrote:
>> >
>> > On Thu, Jan 24, 2013 at 7:06 AM, Sudakshina Das
>> > <sudakshina1...@gmail.com> wrote:
>> > > Dear all,
>> > >
>> > > I am currently updating a pass that was made for gcc-4.6.*, so that it
>> > > works for gcc.4.7.2.
>> > >
>> > > In the pass for gcc-4.6.*, a code fragment from tree-ssa-structalias.c
>> > > was picked up and used.
>> > > Given below is the fragment taken form create_function_info_for () .
>> > > This fragment was used to create variable information for the function
>> > > and it was picked up to perform a similar operation in the added pass
>> > > as well.
>> > >
>> > > But in gcc-4.7.2 some changes are introduced in the fragment. The code
>> > > given below shows the changes that have been introduced in
>> > > create_function_info_for () of tree-ssa-structalias.c in gcc-4.7.2
>> > > along with the original code in the comments.
>> > >
>> > >   /* Add one representative for all further args.  */
>> > >   if (is_varargs)
>> > >     {
>> > >       varinfo_t argvi;
>> > >       const char *newname;
>> > >       char *tempname;
>> > >       tree decl;
>> > >
>> > >       asprintf (&tempname, "%s.varargs", name);
>> > >       newname = ggc_strdup (tempname);
>> > >       free (tempname);
>> > >
>> > >       /* We need sth that can be pointed to for va_start.  */
>> > >
>> > > /**************** CHANGED CODE in GCC-4.7.2 ***************/
>> > >       decl = build_fake_var_decl (ptr_type_node);
>> > >
>> > > /************ ORIGINAL CODE in GCC-4.6.2 *******************
>> > > /*      decl = create_tmp_var_raw (ptr_type_node, name);
>> > >         get_var_ann (decl);
>> > > */
>> > >
>> > >       argvi = new_var_info (decl, newname);
>> > >       argvi->offset = fi_parm_base + num_args;
>> > >       argvi->size = ~0;
>> > >       argvi->is_full_var = true;
>> > >       argvi->is_heap_var = true;
>> > >       argvi->fullsize = vi->fullsize;
>> > >       gcc_assert (prev_vi->offset < argvi->offset);
>> > >       prev_vi->next = argvi;
>> > >       prev_vi = argvi;
>> > >     }
>> > >
>> > >   return vi;
>> > >
>> > >
>> > > So I made the same changes in the pass where this fragment was used.
>> > > But after making the changes the pass is now giving an "internal
>> > > compiler error" and a "segmentation fault" at runtime.
>> > >
>> > > After debugging I could narrow it down to the function
>> > > build_fake_var_decl() and to be specific at the memory allocation
>> > > statement highlighted below.
>> > >
>> > >
>> > > tree
>> > > build_fake_var_decl (tree type)
>> > > {
>> > > /************************ My debugging showed that the control came
>> > > here *********************/
>> > >   tree decl = (tree) XOBNEW (&fake_var_decl_obstack, struct 
>> > > tree_var_decl);
>> > > /************************ But did not come here
>> > > **********************************************************/
>> > >   memset (decl, 0, sizeof (struct tree_var_decl));
>> > >   TREE_SET_CODE (decl, VAR_DECL);
>> > >   TREE_TYPE (decl) = type;
>> > >   DECL_UID (decl) = allocate_decl_uid ();
>> > >   SET_DECL_PT_UID (decl, -1);
>> > >   layout_decl (decl, 0);
>> > >   return decl;
>> > > }
>> > >
>> > > The builf_fake_var_decl() function is a gcc function defined in
>> > > tree-ssa-structalias.c. To be able to use it in my pass, I removed the
>> > > keyword static in its definition.
>> > >
>> > > I cannot figure out what can possibly cause this error in the XOBNEW 
>> > > function.
>> > >
>> > > Please help!!!
>> >
>> > Don't use build_fake_var_decl, use what 4.6 did, create_tmp_var_raw.
>> >
>> > Richard.
>> >
>> >
>>
>> But 4.6 used get_var_ann() also along with create_tmp_var_raw()  which
>> has been removed from 4.7.
>
>
> I would like to clarify my above statement by saying that 4.6 used 2
> functions [ie. create_tmp_var_raw() and get_var_ann()] whereas 4.7
> used only one function [build_fake_var_decl()] for the same purpose.
> Now in 4.7 get_var_ann() is unavailable. So is it safe to use only
> create_tmp_var_raw(). In other words, was get_var_ann() a redundant
> function in 4.6?

The whole function is very special for tree-ssa-structalias.c.  I have no idea
what your pass does, but unless it closely resembles tree-ssa-structalias.c
and shares its internal data structures you shouldn't blindly copy over what
tree-ssa-structalias.c does (well, at least not without understanding what you
are doing).

What do you think you are doing with the copy of that code?

Richard.

>
>>
>> > > Sudakshina Das

Reply via email to