aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-18 20:16:28 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-18 20:16:28 -0500
commit7c08df6c1e61400c9710775bccbae4fc5215fdad (patch)
tree3b16b1a11a5a930310d0eeac72bfd6caab234848
parent8154a826809465bfd01c61db28cfeca0af00f3c5 (diff)
downloadgcc-7c08df6c1e61400c9710775bccbae4fc5215fdad.zip
gcc-7c08df6c1e61400c9710775bccbae4fc5215fdad.tar.gz
gcc-7c08df6c1e61400c9710775bccbae4fc5215fdad.tar.bz2
re PR c++/42837 (FAIL: g++.dg/abi/packed1.C execution test)
PR c++/42837 * class.c (create_vtable_ptr): Set DECL_PACKED if type is packed. From-SVN: r156885
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/class.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/abi/packed1.C2
4 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3140ecf..0f41c56 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2010-02-18 Jason Merrill <jason@redhat.com>
+ PR c++/42837
+ * class.c (create_vtable_ptr): Set DECL_PACKED if type is packed.
+
PR c++/43108
* typeck.c (cp_build_binary_op): Adapt mixed complex/non handling from
C build_binary_op.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index f88914d..f7e0a93 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4554,6 +4554,8 @@ create_vtable_ptr (tree t, tree* virtuals_p)
DECL_ARTIFICIAL (field) = 1;
DECL_FIELD_CONTEXT (field) = t;
DECL_FCONTEXT (field) = t;
+ if (TYPE_PACKED (t))
+ DECL_PACKED (field) = 1;
TYPE_VFIELD (t) = field;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cef2de6..10f8fff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2010-02-18 Jason Merrill <jason@redhat.com>
+ PR c++/42837
+ * g++.dg/abi/packed1.C: Add expected warning.
+
PR c++/43108
* g++.dg/torture/dg-torture.exp: Run c-c++-common torture tests.
* gcc.dg/torture/dg-torture.exp: Likewise.
diff --git a/gcc/testsuite/g++.dg/abi/packed1.C b/gcc/testsuite/g++.dg/abi/packed1.C
index 4e75972..a9dce94 100644
--- a/gcc/testsuite/g++.dg/abi/packed1.C
+++ b/gcc/testsuite/g++.dg/abi/packed1.C
@@ -4,7 +4,7 @@
extern "C" void abort ();
-struct INNER {
+struct INNER { // { dg-warning "inefficient.*vptr" "" { target ia64-*-* hppa*-*-* } }
virtual int foo() const { return 1; }
} __attribute__ ((packed));