C++ PATCH: fix PR 10668

Gabriel Dos Reis gdr@integrable-solutions.net
Thu Jul 17 11:53:00 GMT 2003


This improves diagnostics  in ill-formed program like:

    struct A {
       int i;

       struct B {
          void f();
       };
    };

    void A::B::f()
    {
       int* p = &i;         // ERROR
    }

We used to say:

   error: `A::i' is not a member of `A::B'

Now say say

  error: invalid use of nonstatic data member 'A::i'

as improvement requested in the audit trail.

Bootstrapped and regtested on an i686-pc-linux-gnu.
Applied to mainline.

-- Gaby

Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/ChangeLog,v
retrieving revision 1.3531
diff -p -r1.3531 ChangeLog
*** ChangeLog	17 Jul 2003 04:31:37 -0000	1.3531
--- ChangeLog	17 Jul 2003 11:46:48 -0000
***************
*** 1,3 ****
--- 1,8 ----
+ 2003-07-17  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+ 
+ 	PR c++/10668
+ 	* typeck.c (build_class_member_access_expr): Improve diagnostic. 
+ 
  2003-07-16  Mark Mitchell  <mark@codesourcery.com>
  
  	PR c++/11547
Index: typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/typeck.c,v
retrieving revision 1.481
diff -p -r1.481 typeck.c
*** typeck.c	15 Jul 2003 23:31:52 -0000	1.481
--- typeck.c	17 Jul 2003 11:46:51 -0000
*************** build_class_member_access_expr (tree obj
*** 1805,1811 ****
      member_scope = TYPE_CONTEXT (member_scope);
    if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
      {
!       error ("`%D' is not a member of `%T'", member, object_type);
        return error_mark_node;
      }
  
--- 1805,1814 ----
      member_scope = TYPE_CONTEXT (member_scope);
    if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
      {
!       if (TREE_CODE (member) == FIELD_DECL)
!         error ("invalid use of nonstatic data member '%E'", member);
!       else
!         error ("`%D' is not a member of `%T'", member, object_type);
        return error_mark_node;
      }
  



More information about the Gcc-patches mailing list