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>
|
||||
|
||||
PR c++/68760
|
||||
|
@ -2358,8 +2358,11 @@ build_class_member_access_expr (cp_expr object, tree member,
|
||||
int type_quals;
|
||||
tree member_type;
|
||||
|
||||
null_object_p = (INDIRECT_REF_P (object)
|
||||
&& integer_zerop (TREE_OPERAND (object, 0)));
|
||||
if (INDIRECT_REF_P (object))
|
||||
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. */
|
||||
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>
|
||||
|
||||
* 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