This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gdb.c++/method.exp


On Mon, Apr 08, 2002 at 10:12:46AM -0500, Michael Elizabeth Chastain wrote:
> Good morning Daniel,
> > Erm... did we reach a conclusion about whether those const's were
> > really optional?  In a const method, there should be a const on the
> > type of 'this'.
> 
> The old script accepted these strings:
> 
>   // non-const method
>     "A *" => PASS
>     default => FAIL
> 
>   // const method, gcc_compiled=TRUE
>     "A *" => PASS
>     "const class A *" => XFAIL
>     default => FAIL
> 
>   // const method, gcc_compiled=FALSE
>     "const class A *" => PASS
>     "A *" => XFAIL
>     default => FAIL
> 
>   // non-const method
>     "funk *" => PASS
>     default => FAIL
> 
> One problem is that none of the tests accepted the second "const"
> after the "*".  Another problem, obviously, is the weird logic
> for const methods that depends on gcc_compiled, and *rejects*
> "const A *" for const methods when gcc_compiled=TRUE.
> 
> The new script accepts these strings:
> 
>   // non-const method
>     "class A * const" => PASS
>     "class A *" => PASS
>     "A * const" => PASS
>     "A *" => PASS
>     default => FAIL
> 
>   // const method
>     "const class A * const" => PASS
>     "const class A *" => PASS
>     "const A * const" => PASS
>     "const A *" => PASS
>     "class A * const" => PASS
>     "class A *" => PASS
>     "A * const" => PASS
>     "A *" => PASS
>     default => FAIL
> 
>   // non-const method
>     "class A * const" => PASS
>     "class A *" => PASS
>     "A * const" => PASS
>     "A *" => PASS
>     default => FAIL
> 
> So the old script reported FAIL to "const A *" for a constant method
> when the compiler is gcc.  The new script reports PASS.  That's a
> definite improvement.

Yes, it is!

> The old script reported PASS to "A *" for a constant method when the
> compiler is gcc.  That is problematic.  Right now the new script also
> reports PASS, to be compatible with the old script.
> 
> Now is a good time to break compatibility anyways.  The new script looks
> like this right now (for a const method):
> 
>   gdb_test "print this" \
>     "\\$\[0-9\]* = \\((const |)(class |)A *\\* *(const|)\\) $hex" \
>     "print this in A::bar"
> 
> What do you think of this:
> 
>   gdb_test "print this" \
>     "\\$\[0-9\]* = \\(const (class |)A *\\* *(const|)\\) $hex" \
>     "print this in A::bar"

I think this is right.  That will cause failures for 2.95/stabs and
3.0/stabs; we can XFAIL appropriately (based on version numbers even!).

Does anything currently produce A const * const?  It's probably
legal...

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]