OSDN Git Service

*** empty log message ***
authorgdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Aug 2002 11:42:51 +0000 (11:42 +0000)
committergdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Aug 2002 11:42:51 +0000 (11:42 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56347 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parse.y
gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C [new file with mode: 0644]

index 27e5bc7..7f3c144 100644 (file)
@@ -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
index 4fc8706..02a69d8 100644 (file)
@@ -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 (file)
index 0000000..9fe65bc
--- /dev/null
@@ -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" "" }
+}
+