diff options
author | Siva Chandra <sivachandra@chromium.org> | 2014-09-09 06:50:26 -0700 |
---|---|---|
committer | Siva Chandra <sivachandra@chromium.org> | 2014-10-15 04:28:38 -0700 |
commit | ebb8ece2ef50ba3f86e8b4ab7a22a4c7734d114b (patch) | |
tree | 493f3eaf1d73d2790cef9cc8a8d4ef000c8180a7 /gdb/gnu-v3-abi.c | |
parent | 2d1c107c1b8835f4e85c35320d8595a4a6fcaebe (diff) | |
download | binutils-gdb-ebb8ece2ef50ba3f86e8b4ab7a22a4c7734d114b.tar.gz |
Fix gnuv3_pass_by_reference to treat dynamic classes as non-trivial.
gdb/ChangeLog:
* gnu-v3-abi.c (gnuv3_pass_by_reference): Treat dynamic classes
as non-trivial.
Diffstat (limited to 'gdb/gnu-v3-abi.c')
-rw-r--r-- | gdb/gnu-v3-abi.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index 558ec06ccfa..a6c6f9fd9c8 100644 --- a/gdb/gnu-v3-abi.c +++ b/gdb/gnu-v3-abi.c @@ -1281,6 +1281,11 @@ gnuv3_pass_by_reference (struct type *type) && TYPE_CODE (type) != TYPE_CODE_UNION) return 0; + /* A dynamic class has a non-trivial copy constructor. + See c++98 section 12.8 Copying class objects [class.copy]. */ + if (gnuv3_dynamic_class (type)) + return 1; + for (fieldnum = 0; fieldnum < TYPE_NFN_FIELDS (type); fieldnum++) for (fieldelem = 0; fieldelem < TYPE_FN_FIELDLIST_LENGTH (type, fieldnum); fieldelem++) |