re PR c++/26577 (ICE in cp_expr_size with volatile and non POD)
PR c++/26577 * cvt.c (convert_to_void): Don't automatically load from volatiles of TREE_ADDRESSABLE type. From-SVN: r116554
This commit is contained in:
parent
d218d0e66d
commit
bed02d8960
@ -1,3 +1,9 @@
|
||||
2006-08-28 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/26577
|
||||
* cvt.c (convert_to_void): Don't automatically load from volatiles
|
||||
of TREE_ADDRESSABLE type.
|
||||
|
||||
2006-08-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
PR c++/28860
|
||||
|
@ -864,14 +864,17 @@ convert_to_void (tree expr, const char *implicit)
|
||||
int is_volatile = TYPE_VOLATILE (type);
|
||||
int is_complete = COMPLETE_TYPE_P (complete_type (type));
|
||||
|
||||
/* Can't load the value if we don't know the type. */
|
||||
if (is_volatile && !is_complete)
|
||||
warning (0, "object of incomplete type %qT will not be accessed in %s",
|
||||
type, implicit ? implicit : "void context");
|
||||
else if (is_reference && is_volatile)
|
||||
/* Don't load the value if this is an implicit dereference, or if
|
||||
the type needs to be handled by ctors/dtors. */
|
||||
else if (is_volatile && (is_reference || TREE_ADDRESSABLE (type)))
|
||||
warning (0, "object of type %qT will not be accessed in %s",
|
||||
TREE_TYPE (TREE_OPERAND (expr, 0)),
|
||||
implicit ? implicit : "void context");
|
||||
if (is_reference || !is_volatile || !is_complete)
|
||||
if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type))
|
||||
expr = TREE_OPERAND (expr, 0);
|
||||
|
||||
break;
|
||||
|
12
gcc/testsuite/g++.dg/warn/volatile1.C
Normal file
12
gcc/testsuite/g++.dg/warn/volatile1.C
Normal file
@ -0,0 +1,12 @@
|
||||
// PR c++/26577
|
||||
|
||||
struct A
|
||||
{
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
void baz() volatile;
|
||||
};
|
||||
void A::baz() volatile
|
||||
{
|
||||
*this; // { dg-warning "will not be accessed" }
|
||||
}
|
Loading…
Reference in New Issue
Block a user