diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gnu-v3-abi.c | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c33f6cc..c4f0437 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2014-10-15 Siva Chandra Reddy <sivachandra@google.com> + * gnu-v3-abi.c (gnuv3_pass_by_reference): Treat dynamic classes + as non-trivial. + +2014-10-15 Siva Chandra Reddy <sivachandra@google.com> + PR c++/13403 PR c++/15154 * gnu-v3-abi.c (gnuv3_pass_by_reference): Lookup copy constructors diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index 558ec06..a6c6f9f 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++) |