This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug java/17007] New: Inconsistent builtin attributes set by Java front end


The Java front end is not consistent in setting attributes for builtin
functions.  We rely on TREE_SIDE_EFFECTS and the ECF_* flags to determine
whether a function call will clobber all call-clobbered variables.

Applying the following patch to the operand scanner, will trigger several aborts
in libjava because of this.  It seems to me that neither TREE_SIDE_EFFECTS nor
ECF_* flags are correct out of the Java front end.

I am not familiar enough with the language to determine when it would be safe to
set these attributes.  Some seem obvious, but I'd rather leave this to someone
in Java land.

Index: tree-ssa-operands.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-operands.c,v
retrieving revision 2.29
diff -d -c -p -r2.29 tree-ssa-operands.c
*** tree-ssa-operands.c 12 Aug 2004 14:33:59 -0000      2.29
--- tree-ssa-operands.c 12 Aug 2004 16:55:59 -0000
*************** get_call_expr_operands (tree stmt, tree
*** 1373,1383 ****
        /* A 'pure' or a 'const' functions never call clobber anything.
         A 'noreturn' function might, but since we don't return anyway
         there is no point in recording that.  */
!       if (TREE_SIDE_EFFECTS (expr)
!         && !(call_flags & (ECF_PURE | ECF_CONST | ECF_NORETURN)))
!       add_call_clobber_ops (stmt);
        else if (!(call_flags & (ECF_CONST | ECF_NORETURN)))
!       add_call_read_ops (stmt);
      }
  }

--- 1373,1397 ----
        /* A 'pure' or a 'const' functions never call clobber anything.
         A 'noreturn' function might, but since we don't return anyway
         there is no point in recording that.  */
!       if (!(call_flags & (ECF_PURE | ECF_CONST | ECF_NORETURN)))
!       {
! #if defined ENABLE_CHECKING
!         /* If this is a clobbering call, it should have side-effects.  */
!         if (!TREE_SIDE_EFFECTS (expr))
!           abort ();
! #endif
!         add_call_clobber_ops (stmt);
!       }
        else if (!(call_flags & (ECF_CONST | ECF_NORETURN)))
!       {
! #if defined ENABLE_CHECKING
!         /* If this is not a clobbering call, it should not have
!            side-effects.  */
!         if (TREE_SIDE_EFFECTS (expr))
!           abort ();
! #endif
!         add_call_read_ops (stmt);
!       }
      }
  }

-- 
           Summary: Inconsistent builtin attributes set by Java front end
           Product: gcc
           Version: 3.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: java
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dnovillo at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu
                    dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17007


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]