+2016-11-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/72774
+ PR c++/72786
+ PR c++/77922
+ PR c++/78313
+ * spellcheck.c (selftest::test_find_closest_string): Verify that
+ we don't offer the goal string as a suggestion.
+ * spellcheck.h (best_match::get_best_meaningful_candidate): Don't
+ offer the goal string as a suggestion.
+
+
2016-11-29 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_override_options): Avoid selection of
+2016-11-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/77922
+ * name-lookup.c (lookup_name_fuzzy): Filter out reserved words
+ that were filtered out by init_reswords.
+
2016-11-28 Jakub Jelinek <jakub@redhat.com>
Jason Merrill <jason@redhat.com>
if (!resword_identifier)
continue;
gcc_assert (TREE_CODE (resword_identifier) == IDENTIFIER_NODE);
+
+ /* Only consider reserved words that survived the
+ filtering in init_reswords (e.g. for -std). */
+ if (!C_IS_RESERVED_WORD (resword_identifier))
+ continue;
+
bm.consider (resword_identifier);
}
ASSERT_STREQ ("banana", find_closest_string ("banyan", &candidates));
ASSERT_STREQ ("cherry", find_closest_string ("berry", &candidates));
ASSERT_EQ (NULL, find_closest_string ("not like the others", &candidates));
+
+ /* If the goal string somehow makes it into the candidate list, offering
+ it as a suggestion will be nonsensical. Verify that we don't offer such
+ suggestions. */
+ ASSERT_EQ (NULL, find_closest_string ("banana", &candidates));
}
/* Test data for test_metric_conditions. */
if (m_best_distance > cutoff)
return NULL;
}
+
+ /* If the goal string somehow makes it into the candidate list, offering
+ it as a suggestion will be nonsensical e.g.
+ 'constexpr' does not name a type; did you mean 'constexpr'?
+ Ultimately such suggestions are due to bugs in constructing the
+ candidate list, but as a band-aid, do not offer suggestions for
+ distance == 0 (where candidate == goal). */
+ if (m_best_distance == 0)
+ return NULL;
+
return m_best_candidate;
}
+2016-11-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/72774
+ PR c++/72786
+ PR c++/77922
+ PR c++/78313
+ * g++.dg/spellcheck-c++-11-keyword.C: New test case.
+ * g++.dg/spellcheck-macro-ordering.C: New test case.
+ * g++.dg/spellcheck-pr78313.C: New test case.
+
2016-11-29 Tamar Christina <tamar.christina@arm.com>
* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
--- /dev/null
+/* c++/77922: "constexpr" is only available from C++11 onwards.
+ We shouldn't offer it as a spellcheck suggestion in C++98. */
+// { dg-options "-std=c++98" }
+
+constexpr int a = 1; // { dg-bogus "did you mean" }
+// { dg-error ".constexpr. does not name a type" "" { target *-*-* } .-1 }
+// { dg-message "C\\+\\+11 .constexpr. only available with -std=c\\+\\+11 or -std=gnu\\+\\+11" "" { target *-*-* } .-2 }
+
+/* If the user typos "constexpr" (here as "consexpr"), don't offer it as a
+ spelling suggestion in C++98 mode. */
+consexpr int a = 1; // { dg-bogus "did you mean" }
+// { dg-error ".consexpr. does not name a type" "" { target *-*-* } .-1 }
+
+decltype i = 0; // { dg-bogus "did you mean" }
+// { dg-error ".decltype. does not name a type" "" { target *-*-* } .-1 }
--- /dev/null
+// PR c++/72786
+
+/* Example of a macro-ordering issue, where the use is before the defn. */
+
+class DocTargetDriver {
+ virtual void clone() const OVERRIDE { }
+ /* Offering "OVERRIDE" as a spelling suggestion for "OVERRIDE" would be
+ nonsensical. */
+ // { dg-bogus "did you mean" "" { target *-*-* } .-3 }
+ // { dg-error "expected .;. at end of member declaration" "" { target *-*-* } .-4 }
+ // { dg-error ".OVERRIDE. does not name a type" "" { target *-*-* } .-5 }
+};
+
+#define OVERRIDE override
+
--- /dev/null
+// PR c++/78313 (see also PR c++/72774)
+// { dg-do compile }
+
+void baz ();
+namespace A { void foo (); }
+void bar ()
+{
+ using A::foo;
+ 0 ? static_cast<foo> (0) : baz; // { dg-bogus "did you mean" }
+ // { dg-error "does not name a type" "" { target *-*-* } .-1 }
+}