[PR c++/82710] false positive paren warning
https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00186.html PR c++/82710 * decl.c (grokdeclarator): Protect MAYBE_CLASS things from paren warning too. PR c++/82710 * g++.dg/warn/pr82710.C: More cases. From-SVN: r254371
This commit is contained in:
parent
97695d99b0
commit
a93ee058fa
@ -1,3 +1,9 @@
|
||||
2017-11-03 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/82710
|
||||
* decl.c (grokdeclarator): Protect MAYBE_CLASS things from paren
|
||||
warning too.
|
||||
|
||||
2017-11-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/81957
|
||||
|
@ -10795,13 +10795,15 @@ grokdeclarator (const cp_declarator *declarator,
|
||||
to be a constructor call. */
|
||||
if (decl_context != PARM
|
||||
&& declarator->parenthesized != UNKNOWN_LOCATION
|
||||
/* If the type is a class and the inner name used a global
|
||||
namespace qualifier, we need the parens. Unfortunately
|
||||
all we can tell is that a qualified name was used. */
|
||||
&& !(CLASS_TYPE_P (type)
|
||||
&& inner_declarator
|
||||
/* If the type is class-like and the inner name used a
|
||||
global namespace qualifier, we need the parens.
|
||||
Unfortunately all we can tell is whether a qualified name
|
||||
was used or not. */
|
||||
&& !(inner_declarator
|
||||
&& inner_declarator->kind == cdk_id
|
||||
&& inner_declarator->u.id.qualifying_scope))
|
||||
&& inner_declarator->u.id.qualifying_scope
|
||||
&& (MAYBE_CLASS_TYPE_P (type)
|
||||
|| TREE_CODE (type) == ENUMERAL_TYPE)))
|
||||
warning_at (declarator->parenthesized, OPT_Wparentheses,
|
||||
"unnecessary parentheses in declaration of %qs", name);
|
||||
if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-11-03 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/82710
|
||||
* g++.dg/warn/pr82710.C: More cases.
|
||||
|
||||
2017-11-03 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* gcc.dg/pr82809.c: New test.
|
||||
|
@ -1,7 +1,10 @@
|
||||
// { dg-additional-options -Wparentheses }
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-additional-options "-Wparentheses -Wno-non-template-friend" }
|
||||
|
||||
// the MVP warning triggered on a friend decl. */
|
||||
class X;
|
||||
enum class Q {}; // C++ 11ness
|
||||
enum R {};
|
||||
|
||||
namespace here
|
||||
{
|
||||
@ -9,6 +12,9 @@ namespace here
|
||||
X friendFunc1();
|
||||
X *friendFunc2 ();
|
||||
int friendFunc3 ();
|
||||
int bob ();
|
||||
Q bill ();
|
||||
R ben ();
|
||||
}
|
||||
|
||||
namespace nm
|
||||
@ -19,6 +25,9 @@ namespace nm
|
||||
void friendFunc1 ();
|
||||
void friendFunc2 ();
|
||||
void friendFunc3 ();
|
||||
int bob ();
|
||||
Q bill ();
|
||||
R ben ();
|
||||
}
|
||||
|
||||
class TestClass
|
||||
@ -28,5 +37,12 @@ namespace nm
|
||||
friend X *::here::friendFunc2 ();
|
||||
friend int (::here::friendFunc3 ()); // { dg-warning "" }
|
||||
};
|
||||
|
||||
template <typename T> class X
|
||||
{
|
||||
friend typename T::frob (::here::bob ());
|
||||
friend Q (::here::bill ());
|
||||
friend R (::here::ben ());
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user