summaryrefslogtreecommitdiff
path: root/gcc/cp/tree.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-06-16 07:45:37 -0400
committerJason Merrill <jason@gcc.gnu.org>2014-06-16 07:45:37 -0400
commit949bd6c8ce34292ed83d80294d609835084947c7 (patch)
tree6c91b255dc662ea5fa28035e32d737c726d4ba23 /gcc/cp/tree.c
parent2bd4bfee7e16cf608ae6e16c669e265bce635d48 (diff)
downloadgcc-949bd6c8ce34292ed83d80294d609835084947c7.tar.gz
re PR c++/61500 ([C++11] Can't take pointer to member referenced via member pointer template parameter.)
PR c++/61500 * tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR. From-SVN: r211703
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r--gcc/cp/tree.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 587ae80bcc1..36166052d08 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -102,6 +102,16 @@ lvalue_kind (const_tree ref)
case IMAGPART_EXPR:
return lvalue_kind (TREE_OPERAND (ref, 0));
+ case MEMBER_REF:
+ case DOTSTAR_EXPR:
+ if (TREE_CODE (ref) == MEMBER_REF)
+ op1_lvalue_kind = clk_ordinary;
+ else
+ op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
+ if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
+ op1_lvalue_kind = clk_none;
+ return op1_lvalue_kind;
+
case COMPONENT_REF:
op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
/* Look at the member designator. */