+2005-05-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21340
+ * method.c (implicitly_declare_fn): Clear processing_template_decl
+ when generating implicit declaration.
+
2005-05-27 Mark Mitchell <mark@codesourcery.com>
PR c++/21614
tree raises = empty_except_spec;
tree rhs_parm_type = NULL_TREE;
tree name;
+ HOST_WIDE_INT saved_processing_template_decl;
+
+ /* Because we create declarations for implictly declared functions
+ lazily, we may be creating the declaration for a member of TYPE
+ while in some completely different context. However, TYPE will
+ never be a dependent class (because we never want to do lookups
+ for implicitly defined functions in a dependent class).
+ Furthermore, we must set PROCESSING_TEMPLATE_DECL to zero here
+ because we only create clones for constructors and destructors
+ when not in a template. */
+ gcc_assert (!dependent_type_p (type));
+ saved_processing_template_decl = processing_template_decl;
+ processing_template_decl = 0;
type = TYPE_MAIN_VARIANT (type);
DECL_INLINE (fn) = 1;
gcc_assert (!TREE_USED (fn));
+ /* Restore PROCESSING_TEMPLATE_DECL. */
+ processing_template_decl = saved_processing_template_decl;
+
return fn;
}
+2005-05-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21340
+ * g++.dg/init/ctor6.C: New test.
+
2005-05-29 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/pr21562.c: New.
--- /dev/null
+// PR c++/21340
+
+struct Base{};
+struct Iterator : virtual Base {};
+bool operator==(const Iterator&, const Iterator&);
+struct IteratorI : Iterator {};
+struct Obj
+{
+ bool operator==(const Obj&) const;
+};
+template <int>bool dummy()
+{
+ Obj lhs, rhs;
+ return lhs == rhs;
+}
+int
+main(int argc, char** argv)
+{
+ IteratorI* it2 = new IteratorI();
+}