aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2017-01-31 19:37:11 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2017-01-31 19:37:11 +0000
commit5ae37bdfce3f433ff51af4d614d9271abb25671f (patch)
tree3295b47e768a4552396538ce3c58c82122b156ca /gcc
parent0751254a759314c114e51b47536d2c8feb0fbcea (diff)
downloadgcc-5ae37bdfce3f433ff51af4d614d9271abb25671f.zip
gcc-5ae37bdfce3f433ff51af4d614d9271abb25671f.tar.gz
gcc-5ae37bdfce3f433ff51af4d614d9271abb25671f.tar.bz2
re PR c++/79290 (forming pointer to member function tries to access "__pfn")
PR c++/79290 * typeck.c (build_ptrmemfunc_access_expr): Set TREE_NO_WARNING. PR c++/79290 * g++.dg/warn/pr79290.C: New. From-SVN: r245069
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/typeck.c5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/warn/pr79290.C25
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 78a5725..2a86607 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2017-01-31 Nathan Sidwell <nathan@acm.org>
+ PR c++/79290
+ * typeck.c (build_ptrmemfunc_access_expr): Set TREE_NO_WARNING.
+
PR c++/67273
PR c++/79253
* pt.c: (instantiate_decl): Push to top level when current
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 8f66d3c..ef4dae4 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -2950,7 +2950,10 @@ build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
member = DECL_CHAIN (member))
if (DECL_NAME (member) == member_name)
break;
- return build_simple_component_ref (ptrmem, member);
+ tree res = build_simple_component_ref (ptrmem, member);
+
+ TREE_NO_WARNING (res) = 1;
+ return res;
}
/* Given an expression PTR for a pointer, return an expression
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 922fe64..302843d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2017-01-31 Nathan Sidwell <nathan@acm.org>
+ PR c++/79290
+ * g++.dg/warn/pr79290.C: New.
+
PR c++/67273
PR c++/79253
* g++.dg/cpp1y/pr67273.C: New.
diff --git a/gcc/testsuite/g++.dg/warn/pr79290.C b/gcc/testsuite/g++.dg/warn/pr79290.C
new file mode 100644
index 0000000..65929e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pr79290.C
@@ -0,0 +1,25 @@
+// { dg-additional-options "-Wall" }
+// PR 79290, bogus warning looking inside PMF
+
+struct Song {
+ int get() const ;
+};
+
+typedef int (Song::*PMF_t)() const;
+
+struct SongTag {
+ PMF_t function () const;
+};
+
+
+template<typename T>
+struct Printer {
+ bool Foo(const SongTag &st) {
+ return st.function () == &Song::get;
+ }
+};
+
+void Baz (Printer<int> *p, SongTag const &st)
+{
+ p->Foo (st);
+}