PR middle-end/28075
* tree-inline.c (setup_one_parameter): Strip useless
type conversion before adding it to the IR.
(declare_return_variable): Likewise.
2006-06-19 Andrew Pinski <pinskia@gmail.com>
PR middle-end/28075
* gcc.dg/tree-ssa/inline-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114801
138bc75d-0d04-0410-961f-
82ee72b054a4
+2006-06-19 Andrew Pinski <pinskia@gmail.com>
+
+ PR middle-end/28075
+ * tree-inline.c (setup_one_parameter): Strip useless
+ type conversion before adding it to the IR.
+ (declare_return_variable): Likewise.
+
2006-06-19 Martin Michlmayr <tbm@cyrius.com>
PR c/27149
-2006-06-19 Anatoly Sokolov <aesok@post.ru>
+2006-06-19 Andrew Pinski <pinskia@gmail.com>
+
+ PR middle-end/28075
+ * gcc.dg/tree-ssa/inline-1.c: New test.
+
+2006-06-19 Anatoly Sokolov <aesok@post.ru>
* gcc.dg/pr18241-1.c: Use __SIZE_TYPE__ instead of unsigned long
in malloc prototype; remove XFAIL.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-final_cleanup" } */
+
+
+typedef struct {
+ double min;
+ double max;
+} interval;
+inline interval add(interval x, interval y) __attribute__((always_inline));
+inline interval add(interval x, interval y)
+{
+ interval r;
+ r.min = x.min + y.min;
+ r.max = x.max + y.max;
+ return r;
+}
+interval foo (interval a, interval b, interval c)
+{
+ return add (a, add (b, c));
+}
+
+
+/* { dg-final { scan-tree-dump-times "\(struct interval\)" 0 "final_cleanup"} } */
+/* { dg-final { cleanup-tree-dump "final_cleanup" } } */
+
if (rhs == error_mark_node)
return;
+
+ STRIP_USELESS_TYPE_CONVERSION (rhs);
/* We want to use MODIFY_EXPR, not INIT_EXPR here so that we
keep our trees in gimple form. */
use = var;
if (!lang_hooks.types_compatible_p (TREE_TYPE (var), caller_type))
use = fold_convert (caller_type, var);
+
+ STRIP_USELESS_TYPE_CONVERSION (use);
done:
/* Register the VAR_DECL as the equivalent for the RESULT_DECL; that