* class.c (build_vtbl_ref_1): Do not unconditionally mark vtable
references as constant.
PR c++/12815
* g++.dg/rtti/typeid4.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75457
138bc75d-0d04-0410-961f-
82ee72b054a4
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.
assemble_external (vtbl);
aref = build_array_ref (vtbl, idx);
- TREE_CONSTANT (aref) = 1;
+ TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
return aref;
}
+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'.
--- /dev/null
+// { 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) ;
+ }
+}
+