* Makefile.in (function.o): Depend on langhooks.h.
* alias.c (objects_must_conflict_p): Check honor_readonly when
examining TYPE_READONLY.
* function.c (assign_stack_temp_for_type): Likewise.
PR optimization/6631
* g++.dg/opt/const2.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58136
138bc75d-0d04-0410-961f-
82ee72b054a4
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/6631
+ * alias.c (objects_must_conflict_p): Check honor_readonly when
+ examining TYPE_READONLY.
+ * function.c (assign_stack_temp_for_type): Likewise.
+
2002-10-14 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
* config/alpha/alpha.md (extendsidi2_nofix, extendsidi2_fix):
/* Alias analysis for GNU C
- Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by John Carr (jfc@mit.edu).
This file is part of GCC.
then they may not conflict. */
if ((t1 != 0 && readonly_fields_p (t1))
|| (t2 != 0 && readonly_fields_p (t2))
- || (t1 != 0 && TYPE_READONLY (t1))
- || (t2 != 0 && TYPE_READONLY (t2)))
+ || (t1 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
+ || (t2 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t2)))
return 0;
/* If they are the same type, they must conflict. */
/* If a type is specified, set the relevant flags. */
if (type != 0)
{
- RTX_UNCHANGING_P (slot) = TYPE_READONLY (type);
+ RTX_UNCHANGING_P (slot) = (lang_hooks.honor_readonly
+ && TYPE_READONLY (type));
MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
MEM_SET_IN_STRUCT_P (slot, AGGREGATE_TYPE_P (type));
}
2002-10-14 Mark Mitchell <mark@codesourcery.com>
+ PR optimization/6631
+ * g++.dg/opt/const2.C: New test.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
PR c++/7176
* g++.dg/parse/friend1.C: New test.
* g++.old-deja/g++.pt/memtemp64.C: Adjust.
--- /dev/null
+// { dg-do run }
+// { dg-options "-O" }
+
+extern "C" void abort (void);
+
+struct QSize
+{
+ QSize();
+ QSize( int w, int h );
+ int wd, ht;
+ friend inline const QSize operator+( const QSize &, const QSize & );
+};
+
+inline QSize::QSize()
+{ wd = ht = -1; }
+
+inline QSize::QSize( int w, int h )
+{ wd = w; ht = h; }
+
+inline const QSize operator+( const QSize & s1, const QSize & s2 )
+{ return QSize(s1.wd+s2.wd, s1.ht+s2.ht); }
+
+QSize minimumSize()
+{
+ return QSize (100, 200);
+}
+
+QSize totalMinimumSize()
+{
+ QSize s = minimumSize();
+ return s + QSize( 0, 0 );
+}
+
+int main()
+{
+ QSize s = totalMinimumSize();
+ if (s.wd != 100 || s.ht != 200)
+ abort ();
+}
+