Fix PR c++/68711 - [6 regression] SEGV on an invalid offsetof of a member
of a virtual base. gcc/testsuite/ChangeLog: * g++.dg/other/offsetof8.C: New test. gcc/cp/ChangeLog: * typeck.c (build_class_member_access_expr): Strip NOPs before testing a potentially null operand for equality to zero. From-SVN: r231437
This commit is contained in:
parent
9ba300b1a5
commit
1a161cd7a7
@ -1,3 +1,9 @@
|
|||||||
|
2015-12-08 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
|
PR c++/68711
|
||||||
|
* typeck.c (build_class_member_access_expr): Strip NOPs before
|
||||||
|
testing a potentially null operand for equality to zero.
|
||||||
|
|
||||||
2015-12-07 Jakub Jelinek <jakub@redhat.com>
|
2015-12-07 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/68760
|
PR c++/68760
|
||||||
|
@ -2358,8 +2358,11 @@ build_class_member_access_expr (cp_expr object, tree member,
|
|||||||
int type_quals;
|
int type_quals;
|
||||||
tree member_type;
|
tree member_type;
|
||||||
|
|
||||||
null_object_p = (INDIRECT_REF_P (object)
|
if (INDIRECT_REF_P (object))
|
||||||
&& integer_zerop (TREE_OPERAND (object, 0)));
|
null_object_p =
|
||||||
|
integer_zerop (tree_strip_nop_conversions (TREE_OPERAND (object, 0)));
|
||||||
|
else
|
||||||
|
null_object_p = false;
|
||||||
|
|
||||||
/* Convert OBJECT to the type of MEMBER. */
|
/* Convert OBJECT to the type of MEMBER. */
|
||||||
if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
|
if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-12-08 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
|
PR c++/68711
|
||||||
|
* g++.dg/other/offsetof8.C: New test.
|
||||||
|
|
||||||
2015-12-08 Nathan Sidwell <nathan@acm.org>
|
2015-12-08 Nathan Sidwell <nathan@acm.org>
|
||||||
|
|
||||||
* gcc.target/nvptx/trailing-init.c: New.
|
* gcc.target/nvptx/trailing-init.c: New.
|
||||||
|
12
gcc/testsuite/g++.dg/other/offsetof8.C
Normal file
12
gcc/testsuite/g++.dg/other/offsetof8.C
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// PR c++/68711 - [5 regression] SEGV on an invalid offsetof of a member
|
||||||
|
// of a virtual base
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
struct A { int i; };
|
||||||
|
|
||||||
|
struct B: virtual A { };
|
||||||
|
|
||||||
|
int a[] = {
|
||||||
|
!&((B*)0)->i, // { dg-error "invalid access to non-static data member" }
|
||||||
|
__builtin_offsetof (B, i) // { dg-error "invalid access to non-static" }
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user