diff options
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/ref-qual10.C | 13 |
3 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 67b4d77..eab529a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-05-13 Jason Merrill <jason@redhat.com> + + PR c++/57252 + * decl.c (decls_match): Compare ref-qualifiers. + 2013-05-10 Jason Merrill <jason@redhat.com> PR c++/57196 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 9c97c9d..0df3ae8 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1024,6 +1024,7 @@ decls_match (tree newdecl, tree olddecl) else types_match = compparms (p1, p2) + && type_memfn_rqual (f1) == type_memfn_rqual (f2) && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE || comp_type_attributes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)) != 0); diff --git a/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C b/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C new file mode 100644 index 0000000..1b6c54f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C @@ -0,0 +1,13 @@ +// PR c++/57252 +// { dg-require-effective-target c++11 } + +struct foo { + void bar() & {} + void bar() && {} +}; + +int main() +{ + auto p = &foo::bar; // { dg-error "" } + (foo{}.*p)(); +} |