pro64-support
[Top] [All Lists]

RE: C to Whirl

To: "'hardnett@xxxxxxxxxxxxx'" <hardnett@xxxxxxxxxxxxx>
Subject: RE: C to Whirl
From: "Huang, Tao" <tao.huang@xxxxxxxxx>
Date: Wed, 15 Aug 2001 22:51:15 +0800
Cc: pro64-support@xxxxxxxxxxx
Sender: owner-pro64-support@xxxxxxxxxxx
Great! 
in fact, my modification is very trivial. 
1)change ty to TY_IDX by using make_TY_IDX() call
2)erase "!" operator in two statements

That's all.  :-)  Sorry for not distinguish modified statements from original 
statements because there is something wrong with my outlook, I can not change 
it into another color or font.

Thx
-Tao Huang

-----Original Message-----
From: Charles R. Hardnett [mailto:hardnett@xxxxxxxxxxxxx]
Sent: 2001å¹´8æoe^15æ-¥ 22:34
To: tao.huang@xxxxxxxxx
Cc: pro64-support@xxxxxxxxxxx
Subject: RE: C to Whirl





Thanks. I also fixed the elaboration bug by creating a declaration
context, and then just checking for that context. 

As for the ambiguity problem. I have a solution that I am working on
that uses information collected by gfec to help make decisions about
the ambiguities. It should be done sometime this week. 

Regards,


Charles




Huang, Tao writes:
 > I had a try to fix this bug, the modification place can be described as 
 > below:
 > 
 > 1)in function W2C_Enter_Global_Symbols() of file w2c_driver.cxx line 541 ~ 
 > 549 change to:
 >      for (UINT ty = 1; ty < TY_Table_Size(); ty++)
 >       {
 >                      TY_IDX ty_current = make_TY_IDX(ty);
 >                      if (TY_Is_Structured(ty_current))
 >                       {
 >                      (void)W2CF_Symtab_Nameof_Ty(ty_current);
 >                      for (fld = TY_flist(Ty_Table[ty_current]); !fld.Is_Null 
 > (); fld = FLD_next(fld))
 >                      (void)W2CF_Symtab_Nameof_Fld(fld);
 >                      } /* if a struct */
 >      } /* for all types */
 >      
 >      Reason: index variable need left shift 8 bits to transform to TY_IDX.
 > 
 > 2) in function WN2C_Append_Symtab_Types() file wn2c.cxx line 1969 ~ 1988 
 > change to:
 >         /* Declare structure types. */
 >        for (ty = 1; ty < TY_Table_Size(); ty++)
 >        {
 >            TY_IDX ty_current = make_TY_IDX(ty);
 >            if (TY_Is_Structured(ty_current)       &&
 >                !TY_split(Ty_Table[ty_current])    &&
 >                !TY_is_translated_to_c(ty_current) &&
 >                !Stab_Reserved_Ty(ty_current))
 >            {
 >               tmp_tokens = New_Token_Buffer();
 >               TY2C_translate_unqualified(tmp_tokens, ty_current);
 >               Append_Token_Special(tmp_tokens, ';');
 >               Append_Indented_Newline(tmp_tokens, lines_between_decls);
 >               if (tokens != NULL)
 >                  Append_And_Reclaim_Token_List(tokens, &tmp_tokens);
 >               else
 >                  Write_And_Reclaim_Tokens(W2C_File[W2C_DOTH_FILE], 
 >                                           NULL, /* No srcpos map */
 >                                           &tmp_tokens);
 >         }
 >      }
 >      Reason: similiar to 1)
 > 
 > 3) in function skip_till_next_field() in file ty2c.cxx line 280 ~ 288 change 
 > to:
 >          while (!next_fld.Is_Null () &&
 >             (FLD_ofst(this_fld) >= FLD_ofst(next_fld) ||
 >              PTR_OR_ALIGNED_WITH_STRUCT(FLD_type(next_fld),  struct_align) ||
 >             (!TY_Is_Pointer(FLD_type(next_fld)) &&
 >               FLD_ofst(next_fld) % TY_align(FLD_type(next_fld)) != 0) ||
 >             (!is_union && FLD_Is_Bitfield(next_fld,  FLD_next(next_fld),
 >                                struct_size - FLD_ofst(next_fld)))))
 > 
 >         The modification is to erase ! operator before stmt 
 > PTR_OR_ALIGNED_WITH_STRUCT(FLD_type(next_fld),  struct_align)
 > 
 > 4) in function function TY2C_prepend_FLD_list() in file 
 > ./be/whirl2c/ty2c.cxx line 372 ~ 374 change to:
 >    if (PTR_OR_ALIGNED_WITH_STRUCT(FLD_type(fld), struct_align) ||
 >        (!is_union &&
 >      FLD_Is_Bitfield(fld, FLD_next(fld), remaining_bytes)))
 > 
 >        The modification is to erase ! operator before stmt 
 > PTR_OR_ALIGNED_WITH_STRUCT(FLD_type(next_fld),  struct_align)
 > 
 > After modification, the code seems like attached files.
 > 
 > There is still a mistake in structure variable number. That's because in 
 > this case there is ambigous name for a intrinsic call stat() and a intrinsic 
 > struct stat, so cause error in symbol table in function 
 > W2CF_Symtab_Nameof_St() of file w2cf_symtab.cxx.
 > 
 > At last, I'd like to thank for Rune, Peng tu, shin-ming liu for the help and 
 > advice.
 > 
 > -Tao Huang 
 >      
 > -----Original Message-----
 > From: Charles R. Hardnett [mailto:hardnett@xxxxxxxxxxxxx]
 > Sent: 2001?6?25? 21:48
 > To: pro64-support@xxxxxxxxxxx
 > Subject: C to Whirl
 > 
 > 
 > 
 > 
 > Hello,
 > 
 > I have a question that involves the C to Whirl generation. I am using
 > the whirl2C module, and noticed a bug with code such as the following:
 > 
 > 
 >         struct stat sbuf;
 >  
 >         if (sbuf.st_mode) {
 >           printf("hello");
 >         }
 > 
 > 
 > The above code comes out of pro64 after whirl2c translation to look
 > something like:
 > 
 > if((_UINT32)(*(struct stat0 {
 >     _UINT64 st_dev;
 >     _UINT32 st_ino;
 >     _INT32 __pad1;
 >     _UINT32 st_mode;
 >     _UINT32 st_nlink;
 >     _UINT32 st_uid;
 >     _UINT32 st_gid;
 >     _UINT64 st_rdev;
 >     _INT64 st_size;
 >     _INT64 st_atime;
 >     _INT64 st_mtime;
 >     _INT64 st_ctime;
 >     _INT32 st_blocks;
 >     _INT32 __pad2;
 >     _UINT32 st_blksize;
 >     _INT32 __pad3;
 >     _INT64 __unused[6LL];
 >   } *)(((_INT8 *) & sbuf) + 16LL)) != 0U)
 >   {
 >     printf((const _INT8 *)(_INT8(*)[6LL]) "hello");
 >   }                                                                          
 >    
 > 
 > The problem of course is cast contains a declaration of the struct,
 > and not just the name of the struct. I have tracked down the problem
 > to where this only occurs when a struct field is accessed within a
 > cond exp i.e. within while, if, for, etc.
 > 
 > I have also convinced myself that the problem is not in the whirl2c
 > conversion because it appears that whirl2C is only outputing the token
 > information that is stored in the WN for this object's
 > type. Therefore, it appears that the problem is the translation from C
 > to whirl by GFEC is most likely the culprit. 
 > 
 > My questions are: 
 > 
 >    1. Is there anyone else looking at the whirl2c module that may have
 > run into this problem?
 > 
 >    2. If not, does anyone have any good information on GFEC and how
 > its exprs are stored? operated on to create the whirl? I was looking
 > at the code this weekend, and could use any documentation anyone may
 > have on it.
 > 
 > Thanks,
 > 
 > Charles
 >   
 > -- 
 > --------------------------------------------------------------------
 > Charles R. Hardnett www.spelman.edu/~hardnett 
 > 
 > 
 > 
 > 
 > 
 > begin 600 problem.w2c.h
 > M+RH@26YC;'5D92!B=6EL=&EN('1Y<&5S(&%N9"!O<&5R871O<G,@*B\*(VEN
 > M8VQU9&4@/'=H:7)L,F,N:#X*"B\J(%1Y<&5S("HO"G-T<G5C="!S=&%T('L*
 > M("!?54E.5#8T('-T7V1E=CL*("!?54E.5#,R('-T7VEN;SL*("!?24Y4,S(@
 > M7U]P860Q.PH@(%]524Y4,S(@<W1?;6]D93L*("!?54E.5#,R('-T7VYL:6YK
 > M.PH@(%]524Y4,S(@<W1?=6ED.PH@(%]524Y4,S(@<W1?9VED.PH@(%]524Y4
 > M-C0@<W1?<F1E=CL*("!?24Y4-C0@<W1?<VEZ93L*("!?24Y4-C0@<W1?871I
 > M;64["B`@7TE.5#8T('-T7VUT:6UE.PH@(%])3E0V-"!S=%]C=&EM93L*("!?
 > M24Y4,S(@<W1?8FQO8VMS.PH@(%])3E0S,B!?7W!A9#(["B`@7U5)3E0S,B!S
 > M=%]B;&MS:7IE.PH@(%])3E0S,B!?7W!A9#,["B`@7TE.5#8T(%]?=6YU<V5D
 > M6S9,3%T["GT["@HO*B!&:6QE+6QE=F5L('-Y;6)O;&EC(&-O;G-T86YT<R`J
 > M+PIS=&%T:6,@7TE.5#@@86YO;ELV3$Q=(#T@(FAE;&QO(CL*"B\J($9I;&4M
 > M;&5V96P@=F%R<R!A;F0@<F]U=&EN97,@*B\*7U]I;FQI;F4@xxxxx#,R('-T
 > M870P*&-O;G-T(%])3E0X("HL('-T<G5C="!S=&%T,2`J*3L*"F5X=&5R;B!?
 > M24Y4,S(@7U]X<W1A="A?24Y4,S(L(&-O;G-T(%])3E0X("HL('-T<G5C="!S
 > M=&%T,2`J*3L*"E]?:6YL:6YE(%])3E0S,B!L<W1A="AC;VYS="!?24Y4."`J
 > M+"!S=')U8W0@<W1A=#$@*BD["@IE>'1E<FX@xxxxx#,R(%]?;'AS=&%T*%])
 > M3E0S,BP@8V]N<W0@xxxxx#@@*BP@<W1R=6-T('-T870Q("HI.PH*7U]I;FQI
 > M;F4@xxxxx#,R(&9S=&%T*%])3E0S,BP@<W1R=6-T('-T870Q("HI.PH*97AT
 > M97)N(%])3E0S,B!?7V9X<W1A="A?24Y4,S(L(%])3E0S,BP@<W1R=6-T('-T
 > M870Q("HI.PH*7U]I;FQI;F4@xxxxx#,R(&UK;F]D*&-O;G-T(%])3E0X("HL
 > M(%]524Y4,S(L(%]524Y4-C0I.PH*97AT97)N(%])3E0S,B!?7WAM:VYO9"A?
 > M24Y4,S(L(&-O;G-T(%])3E0X("HL(%]524Y4,S(L(%]524Y4-C0@*BD["@IE
 > M>'1E<FX@xxxxx#,R(&UA:6XH*3L*"F5X=&5R;B!?24Y4,S(@<')I;G1F*&-O
 > 4;G-T(%])3E0X("HL("XN+BD["@H=
 > `
 > end
 > 
 > begin 600 problem.c
 > M(VEN8VQU9&4@/'-T9&EO+F@^"B-I;F-L=61E(#QS>7,O<W1A="YH/@HC:6YC
 > M;'5D92`\=6YI<W1D+F@^(`H*:6YT(&UA:6XH*0I["@ES=')U8W0@<W1A="!S
 > M8G5F.PH*"6EF("AS8G5F+G-T7VUO9&4I"@D)<')I;G1F*")H96QL;R(I.PI]
 > !"@==
 > `
 > end
 > 
 > begin 600 problem.w2c.c
 > M+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
 > M*BHJ*BHJ*BHJ*BH*("H@0R!F:6QE('1R86YS;&%T960@9G)O;2!72$E23"!7
 > M960@075G(#$U(#(R.C`W.C$X(#(P,#$*("HJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
 > M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHO"@HO*B!);F-L
 > M=61E(&9I;&4M;&5V96P@='EP92!A;F0@=F%R:6%B;&4@9&5C;',@*B\*(VEN
 > M8VQU9&4@(G!R;V)L96TN=S)C+F@B"@H*7U]I;FQI;F4@xxxxx#,R('-T870P
 > M*`H@(&-O;G-T(%])3E0X("H@7U]P871H+`H@('-T<G5C="!S=&%T,2`J(%]?
 > M<W1A=&)U9BD*>PH@(')E9VES=&5R(%])3E0S,B!?7V-O;6UA.PH@(`H@(%]?
 > M8V]M;6$@/2!?7WAS=&%T*#$L(%]?<&%T:"P@7U]S=&%T8G5F*3L*("!R971U
 > M<FX@7U]C;VUM83L*?2`O*B!S=&%T,"`J+PH*"E]?:6YL:6YE(%])3E0S,B!L
 > M<W1A="@*("!C;VYS="!?24Y4."`J(%]?<&%T:"P*("!S=')U8W0@<W1A=#$@
 > M*B!?7W-T871B=68I"GL*("!R96=I<W1E<B!?24Y4,S(@7U]C;VUM83L*("`*
 > M("!?7V-O;6UA(#T@7U]L>'-T870H,2P@7U]P871H+"!?7W-T871B=68I.PH@
 > M(')E='5R;B!?7V-O;6UA.PI]("\J(&QS=&%T("HO"@H*7U]I;FQI;F4@7TE.
 > M5#,R(&9S=&%T*`H@(%])3E0S,B!?7V9D+`H@('-T<G5C="!S=&%T,2`J(%]?
 > M<W1A=&)U9BD*>PH@(')E9VES=&5R(%])3E0S,B!?7V-O;6UA.PH@(`H@(%]?
 > M8V]M;6$@/2!?7V9X<W1A="@Q+"!?7V9D+"!?7W-T871B=68I.PH@(')E='5R
 > M;B!?7V-O;6UA.PI]("\J(&9S=&%T("HO"@H*7U]I;FQI;F4@xxxxx#,R(&UK
 > M;F]D*`H@(&-O;G-T(%])3E0X("H@7U]P871H+`H@(%]524Y4,S(@7U]M;V1E
 > M+`H@(%]524Y4-C0@7U]D978I"GL*("!R96=I<W1E<B!?24Y4,S(@7U]C;VUM
 > M83L*("`*("!?7V-O;6UA(#T@7U]X;6MN;V0H,"P@7U]P871H+"!?7VUO9&4L
 > M("9?7V1E=BD["B`@<F5T=7)N(%]?8V]M;6$["GT@+RH@;6MN;V0@*B\*"@I?
 > M24Y4,S(@;6%I;B@I"GL*("!R96=I<W1E<B!?24Y4,S(@<F5G.#L*("!S=')U
 > M8W0@<W1A=#$@<V)U9CL*("`*("!I9B@H7U5)3E0S,BDH*BAS=')U8W0@<W1A
 > M=#$@*BDH*"A?24Y4."`J*2`F('-B=68I("L@,39,3"DI("$](#!5*0H@('L*
 > M("`@('!R:6YT9B@H8V]N<W0@xxxxx#@@*BDH7TE.5#@H*BE;-DQ,72D@(FAE
 > H;&QO(BD["B`@?0H@(')E='5R;B!R96<X.PI]("\J(&UA:6X@*B\*"@==
 > `
 > end
 > 

-- 
--------------------------------------------------------------------
Charles R. Hardnett www.spelman.edu/~hardnett 


<Prev in Thread] Current Thread [Next in Thread>