aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@nerim.net>2002-08-15 11:42:51 +0000
committerGabriel Dos Reis <gdr@gcc.gnu.org>2002-08-15 11:42:51 +0000
commite8fe46d4d64b4e482d7688ee59c39770ab95a5bd (patch)
tree932fed35b8959e38e8df7c752740193d91a038d3 /gcc
parenteac5ce6c93ebae62a03b741975086d5b09151334 (diff)
downloadgcc-e8fe46d4d64b4e482d7688ee59c39770ab95a5bd.zip
gcc-e8fe46d4d64b4e482d7688ee59c39770ab95a5bd.tar.gz
gcc-e8fe46d4d64b4e482d7688ee59c39770ab95a5bd.tar.bz2
*** empty log message ***
From-SVN: r56347
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parse.y8
-rw-r--r--gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C12
3 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 27e5bc7..7f3c144 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2002-08-15 Gabriel Dos Reis <gdr@nerim.net>
+
+ Fix PR/7504
+ * parse.y (parse_finish_call_expr): Handle incomplete
+ type used to name a scope.
+
2002-08-15 Nathan Sidwell <nathan@codesourcery.com>
PR c++/7598
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 4fc8706..02a69d8 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -4133,7 +4133,13 @@ parse_finish_call_expr (tree fn, tree args, int koenig)
fn = lookup_namespace_name (scope, name);
else
{
- if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
+ if (!COMPLETE_TYPE_P (scope) && !TYPE_BEING_DEFINED (scope))
+ {
+ error ("incomplete type '%T' cannot be used to name a scope",
+ scope);
+ return error_mark_node;
+ }
+ else if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
{
template_id = name;
template_args = TREE_OPERAND (name, 1);
diff --git a/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C b/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
new file mode 100644
index 0000000..9fe65bc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
@@ -0,0 +1,12 @@
+// Copyright (C) 2002 Free Software Foundation
+// Origin: jmr@fulcrummicro.com
+// Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+
+struct A;
+
+int main()
+{
+ A::g(); // { dg-error "incomplete" "" }
+}
+