+2006-09-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/26696
+ * cvt.c (convert_to_void): Replace a subexpression with no side
+ effects with void_zero_node.
+ * tree.c (is_overloaded_fn): Look through COMPONENT_REF.
+ (get_first_fn): Ditto.
+ * decl.c (grokdeclarator): No need to look through COMPONENT_REF.
+
2006-09-05 Jason Merrill <jason@redhat.com>
PR c++/26571
}
expr = build1 (CONVERT_EXPR, void_type_node, expr);
}
+ if (! TREE_SIDE_EFFECTS (expr))
+ expr = void_zero_node;
return expr;
}
tree fns = TREE_OPERAND (decl, 0);
dname = fns;
- if (TREE_CODE (dname) == COMPONENT_REF)
- dname = TREE_OPERAND (dname, 1);
if (TREE_CODE (dname) != IDENTIFIER_NODE)
{
gcc_assert (is_overloaded_fn (dname));
is_overloaded_fn (tree x)
{
/* A baselink is also considered an overloaded function. */
- if (TREE_CODE (x) == OFFSET_REF)
+ if (TREE_CODE (x) == OFFSET_REF
+ || TREE_CODE (x) == COMPONENT_REF)
x = TREE_OPERAND (x, 1);
if (BASELINK_P (x))
x = BASELINK_FUNCTIONS (x);
{
gcc_assert (is_overloaded_fn (from));
/* A baselink is also considered an overloaded function. */
+ if (TREE_CODE (from) == COMPONENT_REF)
+ from = TREE_OPERAND (from, 1);
if (BASELINK_P (from))
from = BASELINK_FUNCTIONS (from);
return OVL_CURRENT (from);
c.f; // { dg-error "statement cannot resolve" "" }
c.f<int>; // { dg-error "statement cannot resolve" "" }
- c.g == 1; // { dg-error "invalid use of" "" }
- c.f == 1; // { dg-error "invalid use of" "" }
- c.f<int> == 1; // { dg-error "invalid use of" "" }
+ c.g == 1; // { dg-error "invalid" "" }
+ c.f == 1; // { dg-error "invalid" "" }
+ c.f<int> == 1; // { dg-error "invalid" "" }
}
--- /dev/null
+// PR c++/26696
+
+struct A
+{
+ static void f() {}
+};
+
+int main()
+{
+ A a;
+ a.f; // { dg-warning "not call" }
+}