re PR c++/83592 (Annoying -Wparentheses warnings)
authorMarek Polacek <polacek@redhat.com>
Wed, 3 Jan 2018 13:30:00 +0000 (13:30 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Wed, 3 Jan 2018 13:30:00 +0000 (13:30 +0000)
PR c++/83592
* decl.c (grokdeclarator): Don't warn about MVP in typename context.

* g++.dg/warn/mvp2.C: New test.

From-SVN: r256176

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/mvp2.C [new file with mode: 0644]

index 2fe42b2bb92a077a669369c332639f7dcc2c5556..506684aeb47c8c1da6c083fc59ca2ded17ab461d 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-03  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/83592
+       * decl.c (grokdeclarator): Don't warn about MVP in typename context.
+
 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR preprocessor/83602
index f7b03e13303ebe38390e5a6558943e81bf705a2d..b1c50961169b9d7ea8b831532d35126049f50ff1 100644 (file)
@@ -10866,10 +10866,11 @@ grokdeclarator (const cp_declarator *declarator,
 
       inner_declarator = declarator->declarator;
 
-      /* We don't want to warn in parmeter context because we don't
+      /* We don't want to warn in parameter context because we don't
         yet know if the parse will succeed, and this might turn out
         to be a constructor call.  */
       if (decl_context != PARM
+         && decl_context != TYPENAME
          && declarator->parenthesized != UNKNOWN_LOCATION
          /* If the type is class-like and the inner name used a
             global namespace qualifier, we need the parens.
index d2c1c96ccdbbab8ac4cc5dc49146bae24059e50a..d4d380447ec7988957bc00cc1d9d312fb94e8ea8 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-03  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/83592
+       * g++.dg/warn/mvp2.C: New test.
+
 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR preprocessor/83602
diff --git a/gcc/testsuite/g++.dg/warn/mvp2.C b/gcc/testsuite/g++.dg/warn/mvp2.C
new file mode 100644 (file)
index 0000000..6e1ffb5
--- /dev/null
@@ -0,0 +1,24 @@
+// PR c++/83592
+// { dg-do compile }
+// { dg-options "-Wparentheses" }
+
+// Test that -Wparentheses does not give bogus warnings in
+// typename context.
+
+int *
+foo (long &a)
+{
+  return reinterpret_cast<int (*)> (&a);
+}
+
+int *
+bar (long &a)
+{
+  return (int (*)) &a;
+}
+
+int *
+baz (int &a)
+{
+  return static_cast<int (*const)> (&a);
+}