Don't offer suggestions for compiler-generated variables (PR c++/85515)
gcc/cp/ChangeLog: PR c++/85515 * name-lookup.c (consider_binding_level): Skip compiler-generated variables. * search.c (lookup_field_fuzzy_info::fuzzy_lookup_field): Flatten nested if statements into a series of rejection tests. Reject lambda-ignored entities as suggestions. gcc/testsuite/ChangeLog: PR c++/85515 * g++.dg/pr85515-1.C: New test. * g++.dg/pr85515-2.C: New test. From-SVN: r259720
This commit is contained in:
parent
2885a4939a
commit
66bd30863f
|
@ -1,3 +1,12 @@
|
|||
2018-04-27 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c++/85515
|
||||
* name-lookup.c (consider_binding_level): Skip compiler-generated
|
||||
variables.
|
||||
* search.c (lookup_field_fuzzy_info::fuzzy_lookup_field): Flatten
|
||||
nested if statements into a series of rejection tests. Reject
|
||||
lambda-ignored entities as suggestions.
|
||||
|
||||
2018-04-27 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* cvt.c (cp_fold_convert): Use convert_ptrmem.
|
||||
|
|
|
@ -5860,6 +5860,12 @@ consider_binding_level (tree name, best_match <tree, const char *> &bm,
|
|||
&& DECL_ANTICIPATED (d))
|
||||
continue;
|
||||
|
||||
/* Skip compiler-generated variables (e.g. __for_begin/__for_end
|
||||
within range for). */
|
||||
if (TREE_CODE (d) == VAR_DECL
|
||||
&& DECL_ARTIFICIAL (d))
|
||||
continue;
|
||||
|
||||
tree suggestion = DECL_NAME (d);
|
||||
if (!suggestion)
|
||||
continue;
|
||||
|
|
|
@ -1224,9 +1224,16 @@ lookup_field_fuzzy_info::fuzzy_lookup_field (tree type)
|
|||
|
||||
for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
|
||||
{
|
||||
if (!m_want_type_p || DECL_DECLARES_TYPE_P (field))
|
||||
if (DECL_NAME (field))
|
||||
m_candidates.safe_push (DECL_NAME (field));
|
||||
if (m_want_type_p && !DECL_DECLARES_TYPE_P (field))
|
||||
continue;
|
||||
|
||||
if (!DECL_NAME (field))
|
||||
continue;
|
||||
|
||||
if (is_lambda_ignored_entity (field))
|
||||
continue;
|
||||
|
||||
m_candidates.safe_push (DECL_NAME (field));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2018-04-27 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR c++/85515
|
||||
* g++.dg/pr85515-1.C: New test.
|
||||
* g++.dg/pr85515-2.C: New test.
|
||||
|
||||
2018-04-27 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84691
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// { dg-require-effective-target c++14 }
|
||||
|
||||
void test_1 ()
|
||||
{
|
||||
auto lambda = [val = 2](){};
|
||||
lambda.val; // { dg-bogus "did you mean" }
|
||||
// { dg-error "has no member named 'val'" "" { target *-*-* } .-1 }
|
||||
}
|
||||
|
||||
int test_2 ()
|
||||
{
|
||||
auto lambda = [val = 2](){ return val; };
|
||||
|
||||
// TODO: should we issue an error for the following assignment?
|
||||
lambda.__val = 4;
|
||||
|
||||
return lambda();
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// { dg-require-effective-target c++11 }
|
||||
|
||||
void test_1 ()
|
||||
{
|
||||
int arr[] = {1, 2, 3, 4, 5};
|
||||
for (const auto v: arr) {
|
||||
_forbegin; // { dg-bogus "suggested alternative" }
|
||||
// { dg-error "'_forbegin' was not declared in this scope" "" { target *-*-*} .-1 }
|
||||
}
|
||||
}
|
||||
|
||||
int test_2 ()
|
||||
{
|
||||
int arr[] = {1, 2, 3, 4, 5};
|
||||
int sum = 0;
|
||||
for (const auto v: arr) {
|
||||
sum += v;
|
||||
// TODO: should we issue an error for the following assignment?
|
||||
__for_begin = __for_end;
|
||||
}
|
||||
return sum;
|
||||
}
|
Loading…
Reference in New Issue