[PATCH v2] Enable gdb.cp/ambiguous.exp with GCC and clang
Luis Machado
luis.machado@linaro.org
Thu Aug 27 11:25:32 GMT 2020
On 8/27/20 8:20 AM, Pedro Alves wrote:
> On 8/27/20 11:39 AM, Gary Benson wrote:
>> Luis Machado wrote:
>>> On 8/25/20 11:21 AM, Gary Benson via Gdb-patches wrote:
>>>> Pedro Alves wrote:
>>>>> On 8/17/20 2:24 PM, Gary Benson wrote:
>>>>>> Pedro Alves wrote:
>>>>>>> On 7/27/20 2:09 PM, Gary Benson via Gdb-patches wrote:
>>>>>>>> + unsupported "compiler does not support -Wno-inaccessible-base"
>>>>>>>
>>>>>>> How about instead of bailing out, use "-Wno-inaccessible-base"
>>>>>>> with GCC >= 10, and use "-w" with older GCCs?
>>>>>>
>>>>>> Sure. How about this?
>>>>>
>>>>> OK.
>>>>
>>>> Thanks, I pushed it.
>>>
>>> I get the following, under Ubuntu 18.04 (GCC 7.x) with this commit...
>>>
>>> FAIL: gdb.cp/ambiguous.exp: print x.x
>>> FAIL: gdb.cp/ambiguous.exp: print n.x
>>> FAIL: gdb.cp/ambiguous.exp: print j.x
>>> FAIL: gdb.cp/ambiguous.exp: print jva1.x
>>> FAIL: gdb.cp/ambiguous.exp: print jva2.x
>>> FAIL: gdb.cp/ambiguous.exp: print (A1)j
>>> FAIL: gdb.cp/ambiguous.exp: print (A1)jva1
>>>
>>> Is the test really supposed to run with older GCC's?
>>
>> Maybe not. Though, I don't know what version of GCC it ought to start
>> working on, so it's hard to know what to do. I could leave the "-w"
>> in for GCC < 10, and add an extra check to make it bail out for GCC
>> <= your version, Luis? With a suitable comment to mention that that's
>> not set in stone?
>
>
> I'm seeing it fail with GCC 9 and clang 10 as well.
>
> Actually, the testcase can't be working _anywhere_. It's
> testing a feature that is gone from GDB.
>
> The testcase come in with the HP merge:
>
> +Sun Jan 10 23:44:11 1999 David Taylor <taylor@texas.cygnus.com>
> +
> +
> + The following files are part of the HP merge; some had longer
> + names at HP, but have been renamed to be no more than 14
> + characters in length.
>
> Looking at the tree back then, we had:
>
> /* Helper function used by value_struct_elt to recurse through baseclasses.
> Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
> and search in it assuming it has (class) type TYPE.
> If found, return value, else return NULL.
>
> If LOOKING_FOR_BASECLASS, then instead of looking for struct fields,
> look for a baseclass named NAME. */
>
> static value_ptr
> search_struct_field (name, arg1, offset, type, looking_for_baseclass)
> char *name;
> register value_ptr arg1;
> int offset;
> register struct type *type;
> int looking_for_baseclass;
> {
> int found = 0;
> char found_class[1024];
> value_ptr v;
> struct type *vbase = NULL;
>
> found_class[0] = '\000';
>
> v = search_struct_field_aux (name, arg1, offset, type, looking_for_baseclass, &found, found_class, &vbase);
> if (found > 1)
> warning ("%s ambiguous; using %s::%s. Use a cast to disambiguate.",
> name, found_class, name);
>
> return v;
> }
>
> But search_struct_field does not handle the ambiguous field
> case nowadays. Somehow it got lost over the years.
> That seems like a regression. I wrote up a patch that adds
> it back (though different), but it exposed other latent
> bugs... Sigh. I'll post it soon.
Thanks. I've reached the same conclusion. This is an artifact of the HP
merge back in the day. I see gdb.cp/ambiguous.exp (previously
gdb.c++/ambiguous.exp) was not updated to remove these cases like
gdb.cp/inherit.exp (previously gdb.c++/inherit.exp) was.
See commit ebac27b4c38 for example:
2004-01-29 Michael Chastain <mec.gnu@mindspring.com>
* gdb.cp/inherit.exp: Rewrite. Use gdb_test_multiple and gdb for
all tests. Remove old hp-ux and cygnus xfail cases.
More information about the Gdb-patches
mailing list