re PR rtl-optimization/6631 (Miscompiled structure access)

PR optimization/6631
	* 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.

From-SVN: r58136
This commit is contained in:
Mark Mitchell 2002-10-14 21:19:05 +00:00 committed by Mark Mitchell
parent 77631fa7ed
commit a3b885703b
5 changed files with 57 additions and 4 deletions

View File

@ -1,3 +1,10 @@
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):

View File

@ -1,5 +1,5 @@
/* 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.
@ -332,8 +332,8 @@ objects_must_conflict_p (t1, t2)
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. */

View File

@ -798,7 +798,8 @@ assign_stack_temp_for_type (mode, size, keep, type)
/* 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));
}

View File

@ -1,3 +1,8 @@
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

View File

@ -0,0 +1,40 @@
// { 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 ();
}