re PR c++/12815 (Code compiled with optimization behaves unexpectedly)
PR c++/12816 * class.c (build_vtbl_ref_1): Do not unconditionally mark vtable references as constant. PR c++/12815 * g++.dg/rtti/typeid4.C: New test. From-SVN: r75457
This commit is contained in:
parent
96f7369ac5
commit
962c082399
@ -1,5 +1,9 @@
|
||||
2004-01-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/12816
|
||||
* class.c (build_vtbl_ref_1): Do not unconditionally mark vtable
|
||||
references as constant.
|
||||
|
||||
PR c++/12132
|
||||
* parser.c (cp_parser_explicit_instantiation): Improve error
|
||||
recovery.
|
||||
|
@ -455,7 +455,7 @@ build_vtbl_ref_1 (tree instance, tree idx)
|
||||
assemble_external (vtbl);
|
||||
|
||||
aref = build_array_ref (vtbl, idx);
|
||||
TREE_CONSTANT (aref) = 1;
|
||||
TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
|
||||
|
||||
return aref;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-01-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/12815
|
||||
* g++.dg/rtti/typeid4.C: New test.
|
||||
|
||||
2004-01-05 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.dg/compat/sdata-section.h: Declare 'abort'.
|
||||
|
26
gcc/testsuite/g++.dg/rtti/typeid4.C
Normal file
26
gcc/testsuite/g++.dg/rtti/typeid4.C
Normal file
@ -0,0 +1,26 @@
|
||||
// { dg-do run }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
#include <typeinfo>
|
||||
#include <iostream>
|
||||
|
||||
struct A { virtual ~A () {} };
|
||||
|
||||
struct APtr
|
||||
{
|
||||
APtr (A* p) : p_ (p) { }
|
||||
A& operator* () const { return *p_; }
|
||||
A* p_;
|
||||
};
|
||||
|
||||
int main ()
|
||||
{
|
||||
APtr ap (new A);
|
||||
std::type_info const* const exp = &typeid (*ap);
|
||||
for (bool cont = true; cont; cont = false)
|
||||
{
|
||||
std::cout << "inner: cont " << cont << std::endl;
|
||||
if (exp) ;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user