+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
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)
+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.
-// { 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
{
X friendFunc1();
X *friendFunc2 ();
int friendFunc3 ();
+ int bob ();
+ Q bill ();
+ R ben ();
}
namespace nm
void friendFunc1 ();
void friendFunc2 ();
void friendFunc3 ();
+ int bob ();
+ Q bill ();
+ R ben ();
}
class TestClass
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 ());
+ };
}