+2016-09-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/77549
+ * name-lookup.c (consider_binding_level): Look through TREE_LIST
+ and OVERLOAD.
+
2016-09-14 Marek Polacek <polacek@redhat.com>
* typeck.c (cp_build_unary_op): Diagnose incrementing boolean
for (tree t = lvl->names; t; t = TREE_CHAIN (t))
{
+ tree d = t;
+
+ /* OVERLOADs or decls from using declaration are wrapped into
+ TREE_LIST. */
+ if (TREE_CODE (d) == TREE_LIST)
+ {
+ d = TREE_VALUE (d);
+ d = OVL_CURRENT (d);
+ }
+
/* Don't use bindings from implicitly declared functions,
as they were likely misspellings themselves. */
- if (TREE_TYPE (t) == error_mark_node)
+ if (TREE_TYPE (d) == error_mark_node)
continue;
/* Skip anticipated decls of builtin functions. */
- if (TREE_CODE (t) == FUNCTION_DECL
- && DECL_BUILT_IN (t)
- && DECL_ANTICIPATED (t))
+ if (TREE_CODE (d) == FUNCTION_DECL
+ && DECL_BUILT_IN (d)
+ && DECL_ANTICIPATED (d))
continue;
- if (DECL_NAME (t))
- bm.consider (DECL_NAME (t));
+ if (DECL_NAME (d))
+ bm.consider (DECL_NAME (d));
}
}
+2016-09-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/77549
+ * g++.dg/lookup/pr77549.C: New test.
+
2016-09-14 Marek Polacek <polacek@redhat.com>
* c-c++-common/gomp/atomic-12.c: Use -Wno-deprecated.
--- /dev/null
+// PR c++/77549
+// { dg-do compile }
+
+struct A
+{
+ static int x;
+};
+
+void
+f1 ()
+{
+ using ::A;
+ x; // { dg-error "'x' was not declared in this scope" }
+}
+
+namespace N
+{
+ int bar;
+}
+
+void
+f2 ()
+{
+ using N::bar;
+ baz++; // { dg-error "'baz' was not declared in this scope" }
+} // { dg-message "note: suggested alternative: 'bar'" "" { target *-*-* } 25 }
+
+int
+bar ()
+{
+ return 0;
+}
+
+namespace M
+{
+ int
+ bar ()
+ {
+ return 0;
+ }
+}
+
+void
+f3 ()
+{
+ using M::bar;
+ baz (); // { dg-error "'baz' was not declared in this scope" }
+} // { dg-message "note: suggested alternative: 'bar'" "" { target *-*-* } 47 }
+
+namespace O
+{
+ int
+ foo ()
+ {
+ return 0;
+ }
+}
+
+namespace P
+{
+ int
+ bar ()
+ {
+ return 0;
+ }
+}
+
+void
+f4 ()
+{
+ using O::foo;
+ using P::bar;
+ fooo (); // { dg-error "'fooo' was not declared in this scope" }
+ // { dg-message "note: suggested alternative: 'foo'" "" { target *-*-* } 73 }
+ baz (); // { dg-error "'baz' was not declared in this scope" }
+} // { dg-message "note: suggested alternative: 'bar'" "" { target *-*-* } 75 }