aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-01-15 23:41:41 +0000
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-01-15 23:41:41 +0000
commit21b34b9c09fe1e62446820345b82ac0cabe284c3 (patch)
treedf4bcaad3755d173ff73028d52742080a8f7f6ab /gcc
parentc0f4b5e40e0e0e5ced7ad19213a96af9cda0ae83 (diff)
downloadgcc-21b34b9c09fe1e62446820345b82ac0cabe284c3.zip
gcc-21b34b9c09fe1e62446820345b82ac0cabe284c3.tar.gz
gcc-21b34b9c09fe1e62446820345b82ac0cabe284c3.tar.bz2
re PR c++/9259 (Calling a non-qualified member function within a sizeof() expression leads to "invalid use of undefined type")
PR c++/9259 * typeck.c (build_class_member_access_expr): Allow to access members of the currently open class. (finish_class_member_access_expr): Likewise. From-SVN: r75948
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/typeck.c6
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9134567..43bd29d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/9259
+ * typeck.c (build_class_member_access_expr): Allow to access members
+ of the currently open class.
+ (finish_class_member_access_expr): Likewise.
+
2004-01-15 Alexandre Oliva <aoliva@redhat.com>
PR c++/13659
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index ff397c0..a238eb4 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1570,7 +1570,8 @@ build_class_member_access_expr (tree object, tree member,
The type of the first expression shall be "class object" (of a
complete type). */
object_type = TREE_TYPE (object);
- if (!complete_type_or_else (object_type, object))
+ if (!currently_open_class (object_type)
+ && !complete_type_or_else (object_type, object))
return error_mark_node;
if (!CLASS_TYPE_P (object_type))
{
@@ -1856,7 +1857,8 @@ finish_class_member_access_expr (tree object, tree name)
The type of the first expression shall be "class object" (of a
complete type). */
- if (!complete_type_or_else (object_type, object))
+ if (!currently_open_class (object_type)
+ && !complete_type_or_else (object_type, object))
return error_mark_node;
if (!CLASS_TYPE_P (object_type))
{