<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
I don't know.<BR>
I'm not too concerned with float/loophole at the moment.<BR>
 Granted, probably a good way is take address, cast to new pointer type, deref -- you know, the "safe" load/store pattern. <BR>
  "view convert" sounds like it might be equivalent but more efficient (ie: not introduce pessimization associated with address-taken).<BR>
 <BR>
 <BR>
I agree though, now that you mention it, sounds useful.<BR>
 <BR>
 <BR>
My more immediate concern is 1) the min/max change I made, though that seems clearly to preserve preexisting semantics 2) changes to let configure -enable-checking to work. Many of the errors around operations that mix integer types, in comparison, assignment, plus, multiply, etc.<BR>
 <BR>
 <BR>
 <BR>
 >  (i.e., bits are compatible, no extension necessary, etc.).<BR>
 <BR>
 <BR>
What would qualify there?<BR>
I can think of only a few:<BR>
   signed to/from unsigned, of same size <BR>
   pointer to/from integer, of same size (loophole) <BR>
   possibly loophole, of same size (e.g. int32 <=> float, int64 <=> double, heck float or double <=> pointer) <BR>
   enum <=> integer, of same size <BR>
   and NOT anything involving a change in size <BR>
   possibly, like boolean <=> int8/uint8, if boolean is 8 bits <BR>
 <BR>
 <BR>
 - Jay<BR><BR> <BR>

<HR id=stopSpelling>
Subject: Re: convert vs. cast in parse.c?<BR>From: hosking@cs.purdue.edu<BR>Date: Mon, 13 Sep 2010 16:22:11 -0400<BR>CC: m3devel@elegosoft.com<BR>To: jay.krell@cornell.edu<BR><BR>
<META name=Generator content="Microsoft SafeHTML">m3_cast uses a NOP_EXPR, which assumes no code needs generating to effect the type change (i.e., bits are compatible, no extension necessary, etc.).
<DIV>convert is provided to perform all reasonable conversions.  It generates code as necessary (see comments below from c-convert.c).</DIV>
<DIV>Looking at the comments for VIEW_CONVERT_EXPR, I wonder if we should be using that for LOOPHOLE on floats to avoid the need for the temporary?</DIV>
<DIV>I'm not sure we should ever be using CONVERT_EXPR explicitly — probably better to use convert and get the CONVERT_EXPR from that as necessary?</DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV>
<DIV>/* Change of width--truncation and extension of integers or reals--</DIV>
<DIV>   is represented with NOP_EXPR.  Proper functioning of many things</DIV>
<DIV>   assumes that no other conversions can be NOP_EXPRs.</DIV>
<DIV><BR></DIV>
<DIV>   Conversion between integer and pointer is represented with CONVERT_EXPR.</DIV>
<DIV>   Converting integer to real uses FLOAT_EXPR</DIV>
<DIV>   and real to integer uses FIX_TRUNC_EXPR.</DIV>
<DIV><BR></DIV>
<DIV>   Here is a list of all the functions that assume that widening and</DIV>
<DIV>   narrowing is always done with a NOP_EXPR:</DIV>
<DIV>     In convert.c, convert_to_integer.</DIV>
<DIV>     In c-typeck.c, build_binary_op (boolean ops), and</DIV>
<DIV><SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span></SPAN>c_common_truthvalue_conversion.</DIV>
<DIV>     In expr.c: expand_expr, for operands of a MULT_EXPR.</DIV>
<DIV>     In fold-const.c: fold.</DIV>
<DIV>     In tree.c: get_narrower and get_unwidened.  */</DIV>
<DIV></DIV>
<DIV>/* Subroutines of `convert'.  */</DIV></DIV>
<DIV><BR></DIV>
<DIV>
<DIV></DIV>
<DIV>/* Create an expression whose value is that of EXPR,</DIV>
<DIV>   converted to type TYPE.  The TREE_TYPE of the value</DIV>
<DIV>   is always TYPE.  This function implements all reasonable</DIV>
<DIV>   conversions; callers should filter out those that are</DIV>
<DIV>   not permitted by the language being compiled.  */</DIV>
<DIV><BR></DIV>
<DIV>tree</DIV>
<DIV>convert (tree type, tree expr)</DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV>Also:</DIV>
<DIV><BR></DIV>
<DIV><SPAN style="FONT-FAMILY: monospace" class=ecxApple-style-span>NOP_EXPR</SPAN></DIV>
<DD style="FONT-FAMILY: Times">These nodes are used to represent conversions that do not require any code-generation. For example, conversion of a <CODE>char*</CODE> to an <CODE>int*</CODE> does not require any code be generated; such a conversion is represented by a <CODE>NOP_EXPR</CODE>. The single operand is the expression to be converted. The conversion from a pointer to a reference is also represented with a <CODE>NOP_EXPR</CODE>. <BR></DD>
<DT style="FONT-FAMILY: Times"><CODE>CONVERT_EXPR</CODE></DT>
<DD style="FONT-FAMILY: Times">These nodes are similar to <CODE>NOP_EXPR</CODE>s, but are used in those situations where code may need to be generated. For example, if an <CODE>int*</CODE> is converted to an <CODE>int</CODE>code may need to be generated on some platforms. These nodes are never used for C++-specific conversions, like conversions between pointers to different classes in an inheritance hierarchy. Any adjustments that need to be made in such cases are always indicated explicitly. Similarly, a user-defined conversion is never represented by a <CODE>CONVERT_EXPR</CODE>; instead, the function calls are made explicit. <BR></DD>
<DT style="FONT-FAMILY: Times"><CODE>FIXED_CONVERT_EXPR</CODE></DT>
<DD style="FONT-FAMILY: Times">These nodes are used to represent conversions that involve fixed-point values. For example, from a fixed-point value to another fixed-point value, from an integer to a fixed-point value, from a fixed-point value to an integer, from a floating-point value to a fixed-point value, or from a fixed-point value to a floating-point value. </DD>
<DIV><BR></DIV>
<DIV><BR>
<DIV>
<DIV style="WORD-WRAP: break-word; FONT-SIZE: 12px"><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxApple-style-span>
<DIV><FONT class=ecxApple-style-span color=#0000ff><FONT class=ecxApple-style-span face="Gill Sans"><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span>Antony Hosking</SPAN></SPAN></FONT></FONT><FONT class=ecxApple-style-span face="Gill Sans"><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span><SPAN class=ecxApple-converted-space> </SPAN>|<SPAN class=ecxApple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span>Associate Professor</SPAN></SPAN><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'" class=ecxApple-style-span> | Computer Science | Purdue University</SPAN></SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span face=GillSans-Light><SPAN style="FONT-FAMILY: GillSans-Light" class=ecxApple-style-span>305 N. University Street | West Lafayette | IN 47907 | USA</SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span color=#0000ff face="Gill Sans"><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span>Office</SPAN></SPAN></FONT><FONT class=ecxApple-style-span face=GillSans-Light><SPAN style="FONT-FAMILY: GillSans-Light" class=ecxApple-style-span><SPAN style="FONT-FAMILY: GillSans-Light" class=ecxApple-style-span> +1 765 494 6001 |<SPAN class=ecxApple-converted-space> </SPAN></SPAN></SPAN></FONT><FONT class=ecxApple-style-span color=#0000ff face="Gill Sans"><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span><SPAN style="FONT-FAMILY: 'Gill Sans'; COLOR: rgb(0,0,255)" class=ecxApple-style-span>Mobile</SPAN></SPAN></FONT><FONT class=ecxApple-style-span face=GillSans-Light><SPAN style="FONT-FAMILY: GillSans-Light" class=ecxApple-style-span><SPAN style="FONT-FAMILY: GillSans-Light" class=ecxApple-style-span><SPAN class=ecxApple-converted-space> </SPAN>+1 765 427 5484</SPAN></SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span face=GillSans-Light><BR class=ecxkhtml-block-placeholder></FONT></DIV></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN><BR class=ecxApple-interchange-newline></SPAN></DIV><BR class=ecxApple-interchange-newline></DIV><BR>
<DIV>
<DIV>On 13 Sep 2010, at 06:31, Jay K wrote:</DIV><BR class=ecxApple-interchange-newline>
<BLOCKQUOTE>
<DIV><BR>Tony, et. al. can you help me understand when in parse.c to use "convert" vs. "cast"?<BR><BR>Thanks,<BR> - Jay<BR><BR><BR><BR><BR><SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span></SPAN><SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span></SPAN><SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span></SPAN>  <SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span> </SPAN><SPAN style="WHITE-SPACE: pre" class=ecxApple-tab-span></SPAN> <BR></DIV></BLOCKQUOTE></DIV><BR></DIV></DIV>                                    </body>
</html>