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:
parent
77631fa7ed
commit
a3b885703b
@ -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):
|
||||
|
@ -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. */
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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
|
||||
|
40
gcc/testsuite/g++.dg/opt/const2.C
Normal file
40
gcc/testsuite/g++.dg/opt/const2.C
Normal 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 ();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user