[C++ PATCH] Fix PR7639
Kriang Lerdsuwanakij
lerdsuwa@users.sourceforge.net
Wed Oct 23 08:26:00 GMT 2002
Hi
The patch below fixes a main-trunk regression introduced in the
major build_component_ref overhaul. In build_class_member_access_expr
we only check if the class is complete. But we forget to check
that the member data we are accessing is also complete as well.
Note that in instantiate_class_template, we treat a class as
completed even though some of its field may be incomplete (in pt.c
about line number 5390).
Bootstrapped and tested on i686-pc-linux-gnu with no regressions.
OK to commit to the trunk?
--Kriang
2002-10-23 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* typeck.c (build_class_member_access_expr): When accessing a
member data, make sure it is complete.
2002-10-23 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/7639
* g++.dg/template/instantiate3.C: New test.
diff -cprN gcc-main-save/gcc/cp/typeck.c gcc-main-new/gcc/cp/typeck.c
*** gcc-main-save/gcc/cp/typeck.c Thu Oct 3 21:48:34 2002
--- gcc-main-new/gcc/cp/typeck.c Wed Oct 23 21:18:34 2002
*************** build_class_member_access_expr (tree obj
*** 1899,1904 ****
--- 1899,1907 ----
intended. */
if (DECL_P (member))
{
+ if (!complete_type_or_else (TREE_TYPE (member), member))
+ return error_mark_node;
+
member_scope = DECL_CLASS_CONTEXT (member);
mark_used (member);
if (TREE_DEPRECATED (member))
diff -cprN gcc-main-save/gcc/testsuite/g++.dg/template/instantiate3.C gcc-main-new/gcc/testsuite/g++.dg/template/instantiate3.C
*** gcc-main-save/gcc/testsuite/g++.dg/template/instantiate3.C Thu Jan 1 07:00:00 1970
--- gcc-main-new/gcc/testsuite/g++.dg/template/instantiate3.C Wed Oct 23 21:40:36 2002
***************
*** 0 ****
--- 1,17 ----
+ // { dg-do compile }
+ // Origin: Scott Snyder <snyder@fnal.gov>
+
+ // PR c++/7639
+ // ICE when accessing member with incomplete type.
+
+ class ACE_Null_Mutex; // { dg-error "forward declaration" }
+
+ template <class TYPE>
+ struct ACE_Cleanup_Adapter
+ {
+ TYPE &object ()
+ { return object_; }
+ TYPE object_; // { dg-error "incomplete type" }
+ };
+
+ template class ACE_Cleanup_Adapter<ACE_Null_Mutex>; // { dg-error "instantiated from here" }
More information about the Gcc-patches
mailing list