binutils-gdb/gdb/testsuite/gdb.cp
Bruno Larsen a41ad3474c PR gdb/28480: Improve ambiguous member detection
Basic ambiguity detection assumes that when 2 fields with the same name
have the same byte offset, it must be an unambiguous request. This is not
always correct. Consider the following code:

class empty { };

class A {
public:
  [[no_unique_address]] empty e;
};

class B {
public:
  int e;
};

class C: public A, public B { };

if we tried to use c.e in code, the compiler would warn of an ambiguity,
however, since A::e does not demand an unique address, it gets the same
address (and thus byte offset) of the members, making A::e and B::e have the
same address. however, "print c.e" would fail to report the ambiguity,
and would instead print it as an empty class (first path found).

The new code solves this by checking for other found_fields that have
different m_struct_path.back() (final class that the member was found
in), despite having the same byte offset.

The testcase gdb.cp/ambiguous.exp was also changed to test for this
behavior.
2021-11-25 09:56:03 -03:00
..
abstract-origin.cc
abstract-origin.exp
align.exp
ambiguous.cc PR gdb/28480: Improve ambiguous member detection 2021-11-25 09:56:03 -03:00
ambiguous.exp PR gdb/28480: Improve ambiguous member detection 2021-11-25 09:56:03 -03:00
annota2.cc
annota2.exp
annota3.cc
annota3.exp
anon-ns2.cc
anon-ns.cc
anon-ns.exp
anon-struct.cc
anon-struct.exp
anon-union.cc
anon-union.exp
arg-reference.cc
arg-reference.exp
baseenum.cc
baseenum.exp
bool.cc
bool.exp
breakpoint-locs-2.cc
breakpoint-locs.cc
breakpoint-locs.exp
breakpoint-locs.h
breakpoint.cc
breakpoint.exp
bs15503.cc
bs15503.exp
call-c-1.c
call-c.cc
call-c.exp
call-method-register.cc
call-method-register.exp
casts03.cc
casts.cc
casts.exp
chained-calls.cc
chained-calls.exp
class2.cc
class2.exp
classes.cc
classes.exp
cmpd-minsyms.cc
cmpd-minsyms.exp
cold-clone.cc
cold-clone.exp
constexpr-field.cc
constexpr-field.exp
converts.cc
converts.exp
cp-relocate.cc
cp-relocate.exp
cpcompletion.exp
cpexprs-debug-types.exp
cpexprs.cc
cpexprs.exp
cpexprs.exp.tcl
cplabel.cc
cplabel.exp
cplusfuncs.cc
cplusfuncs.exp
cpsizeof.cc
cpsizeof.exp
ctti.exp
cttiadd1.cc
cttiadd2.cc
cttiadd3.cc
cttiadd.cc
debug-expr.exp
demangle.exp
derivation2.cc
derivation.cc
derivation.exp
destrprint.cc
destrprint.exp
disasm-func-name.cc
disasm-func-name.exp
dispcxx.cc
dispcxx.exp
ena-dis-br-range.cc
ena-dis-br-range.exp
enum-class.cc
enum-class.exp
except-multi-location-lib.cc
except-multi-location-main.cc
except-multi-location.exp
exception.cc
exception.exp
exceptprint.cc
exceptprint.exp
expand-psymtabs-cxx.cc
expand-psymtabs-cxx.exp
expand-sals.cc
expand-sals.exp
extern-c.cc
extern-c.exp
filename.cc
filename.exp
formatted-ref.cc
formatted-ref.exp
fpointer.cc
fpointer.exp
gdb1355.cc
gdb1355.exp
gdb2384-base.cc
gdb2384-base.h
gdb2384.cc
gdb2384.exp
gdb2495.cc
gdb2495.exp
hang1.cc
hang2.cc
hang3.cc
hang.exp
hang.H
impl-this.cc
impl-this.exp
includefile
infcall-dlopen-lib.cc
infcall-dlopen.cc
infcall-dlopen.exp
infcall-nodebug-c-d0.exp
infcall-nodebug-c-d1.exp
infcall-nodebug-c++-d0.exp
infcall-nodebug-c++-d1.exp
infcall-nodebug-lib.c
infcall-nodebug-main.c
infcall-nodebug.exp.tcl
inherit.exp
iostream.cc
iostream.exp
koenig.cc
koenig.exp
local-static.c
local-static.cc
local-static.exp
local.cc
local.exp
m-data.cc
m-data.exp
m-static1.cc
m-static.cc
m-static.exp
m-static.h
maint.exp
many-args.cc
many-args.exp
mb-ctor.cc
mb-ctor.exp
mb-inline1.cc
mb-inline2.cc
mb-inline.exp
mb-inline.h
mb-templates.cc
mb-templates.exp
member-name.cc
member-name.exp
member-ptr.cc
member-ptr.exp
meth-typedefs.cc
meth-typedefs.exp
method2.cc
method2.exp
method-call-in-c.cc
method-call-in-c.exp
method.cc
method.exp
minsym-fallback-main.cc
minsym-fallback.cc
minsym-fallback.exp
minsym-fallback.h
misc.cc
misc.exp
namelessclass.cc
namelessclass.exp
namelessclass.S
namespace1.cc
namespace-enum-main.cc
namespace-enum.cc
namespace-enum.exp
namespace-nested-import.cc
namespace-nested-import.exp
namespace.cc
namespace.exp
nested-class-func-class.cc
nested-class-func-class.exp
nested-types.cc
nested-types.exp
nextoverthrow.cc
nextoverthrow.exp
no-dmgl-verbose.cc
no-dmgl-verbose.exp
no-libstdcxx-probe.exp
non-trivial-retval.cc
non-trivial-retval.exp
noparam.cc
noparam.exp
nsalias.cc
nsalias.exp
nsdecl.cc
nsdecl.exp
nsimport.cc
nsimport.exp
nsnested.cc
nsnested.exp
nsnoimports.cc
nsnoimports.exp
nsrecurs.cc
nsrecurs.exp
nsstress.cc
nsstress.exp
nsusing.cc
nsusing.exp
operator.cc
operator.exp
oranking.cc
oranking.exp
overload-const.cc
overload-const.exp
overload.cc
overload.exp
ovldbreak.cc
ovldbreak.exp
ovsrch1.cc
ovsrch2.cc
ovsrch3.cc
ovsrch4.cc
ovsrch.exp
ovsrch.h
paren-type.cc
paren-type.exp
parse-lang.cc
parse-lang.exp
pass-by-ref-2.cc
pass-by-ref-2.exp
pass-by-ref.exp
pr9067.cc
pr9067.exp
pr9167.cc
pr9167.exp
pr9594.cc
pr9631.cc
pr9631.exp
pr10687.cc
pr10687.exp
pr10728-x.cc
pr10728-x.h
pr10728-y.cc
pr10728.exp
pr12028.cc
pr12028.exp
pr17132.cc
pr17132.exp
pr17494.cc
pr17494.exp
pr-574.cc
pr-574.exp
pr-1023.cc
pr-1023.exp
pr-1210.cc
pr-1210.exp
print-demangle.exp
printmethod.cc
printmethod.exp
psmang1.cc
psmang2.cc
psmang.exp
psymtab-parameter.cc
psymtab-parameter.exp
ptype-cv-cp.cc gdb/testsuite: Extend tests for print of cv qualifiers 2021-11-19 11:29:52 +00:00
ptype-cv-cp.exp gdb/testsuite: Extend tests for print of cv qualifiers 2021-11-19 11:29:52 +00:00
ptype-flags.cc
ptype-flags.exp
punctuator.exp
re-set-overloaded.cc
re-set-overloaded.exp
readnow-language.cc
readnow-language.exp
ref-params.cc
ref-params.exp
ref-types.cc
ref-types.exp
rtti1.cc
rtti2.cc
rtti.exp
rtti.h
rvalue-ref-casts.cc
rvalue-ref-casts.exp
rvalue-ref-overload.cc
rvalue-ref-overload.exp
rvalue-ref-params.cc
rvalue-ref-params.exp
rvalue-ref-sizeof.cc
rvalue-ref-sizeof.exp
rvalue-ref-types.cc
rvalue-ref-types.exp
save-bp-qualified.cc
save-bp-qualified.exp
scope-err.cc
scope-err.exp
shadow.cc
shadow.exp
smartp.cc
smartp.exp
static-method.cc
static-method.exp
static-print-quit.cc
static-print-quit.exp
static-typedef-print.cc
static-typedef-print.exp
step-and-next-inline.cc
step-and-next-inline.exp
step-and-next-inline.h
stub-array-size2.cc
stub-array-size.cc
stub-array-size.exp
stub-array-size.h
subtypes-2.cc
subtypes.cc
subtypes.exp
subtypes.h
temargs.cc
temargs.exp
templates.cc gdb: Print cv qualifiers if class attributes are substituted 2021-11-19 11:29:43 +00:00
templates.exp gdb: Print cv qualifiers if class attributes are substituted 2021-11-19 11:29:43 +00:00
try_catch.cc
try_catch.exp
typed-enum.cc
typed-enum.exp
typedef-base.cc
typedef-base.exp
typedef-operator.cc
typedef-operator.exp
typeid.cc
typeid.exp
userdef.cc
userdef.exp
using-crash.cc
using-crash.exp
var-tag-2.cc
var-tag-3.cc
var-tag-4.cc
var-tag.cc
var-tag.exp
virtbase2.cc
virtbase2.exp
virtbase.cc
virtbase.exp
virtfunc2.cc
virtfunc2.exp
virtfunc.cc
virtfunc.exp
vla-cxx.cc
vla-cxx.exp
watch-cp.cc
watch-cp.exp
wide_char_types.c
wide_char_types.exp