bootstrap/6619: irix cc chokes on rtl_check macros?

David.Billinghurst@riotinto.com David.Billinghurst@riotinto.com
Thu May 9 17:56:00 GMT 2002


>Number:         6619
>Category:       bootstrap
>Synopsis:       irix cc chokes on rtl_check macros?
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu May 09 17:56:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     David Billinghurst
>Release:        gcc-3.2
>Organization:
>Environment:
mips-sgi-irix6.5
>Description:
gcc-3.2 on irix6.5 using cc fails in rtl.c.  It got past this point yesterday.  

The problem may be related to 

2002-05-08  Janis Johnson  <janis187@us.ibm.com>

	* rtl.h (RTL_FLAG_CHECK*): Add an argument for the macro name,
	and use it in all invocations of these macros.  Clean up comments.
	* rtl.c (rtl_check_failed_flag): Add an argument for the name
	of the flag access macro whose check failed.
	* doc/rtl.texi (Flags): Document additional flag uses.


The error is
"/exd4/billingd/src/gcc/gcc/rtl.c", line 474: error(1029): expected an
          expression
                  || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y)));
                     ^

"/exd4/billingd/src/gcc/gcc/rtl.c", line 474: error(1029): expected an
          expression
                  || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y)));
                                                 ^
2 errors detected in the compilation of "/exd4/billingd/src/gcc/gcc/rtl.c".

The code fragment is

  switch (code)
    {
    case REG:
      /* Until rtl generation is complete, don't consider a reference
	 to the return register of the current function the same as
	 the return from a called function.  This eases the job of
	 function integration.  Once the distinction is no longer
	 needed, they can be considered equivalent.  */
      return (REGNO (x) == REGNO (y)
	      && (! rtx_equal_function_value_matters
		  || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y)));

    case LABEL_REF:
      return XEXP (x, 0) == XEXP (y, 0);



Looking at the preprocessed file I see

  switch (code)
    {
    case REG: 
      return ((((x)->fld[0]). rtuint) == (((y)->fld[0]). rtuint)
	      && (! rtx_equal_function_value_matters
		  || ( ({ rtx const _rtx = ((x)); if (((enum rtx_code) (_rtx)->code) != REG) rtl_check_failed_flag ("REG_FUNCTION_VALUE_P", _rtx, "/exd4/billingd/src/gcc/gcc/rtl.c", 474, "?"); _rtx; })->integrated) == ( ({ rtx const _rtx = ((y)); if (((enum rtx_code) (_rtx)->code) != REG) rtl_check_failed_flag ("REG_FUNCTION_VALUE_P", _rtx, "/exd4/billingd/src/gcc/gcc/rtl.c", 474, "?"); _rtx; })->integrated)));

    case LABEL_REF:
      return (((x)->fld[0]). rtx) == (((y)->fld[0]). rtx);

>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list