diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-03-21 23:03:07 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-03-21 23:03:07 +0100 |
commit | 8c8b42cf72f677e004909b2ab3b3f12353fb94d5 (patch) | |
tree | 6f6420ed0bc94abda56c58b3cdb96da5edc89d8c | |
parent | 152d47df7f625885ae972386c759330cea6b169e (diff) | |
download | gcc-8c8b42cf72f677e004909b2ab3b3f12353fb94d5.zip gcc-8c8b42cf72f677e004909b2ab3b3f12353fb94d5.tar.gz gcc-8c8b42cf72f677e004909b2ab3b3f12353fb94d5.tar.bz2 |
re PR c++/71446 (Incorrect overload resolution when using designated initializers)
PR c++/71446
* call.c (filed_in_pset): Change pset from hash_set<tree> * to
hash_set<tree, true> &, adjust uses accordingly.
(build_aggr_conv): Change pset from hash_set<tree> *
to hash_set<tree, true>. Replace goto fail; with return NULL;,
adjust pset uses.
From-SVN: r269861
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/call.c | 29 |
2 files changed, 17 insertions, 19 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 741ad48..61cf384 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,12 @@ 2019-03-21 Jakub Jelinek <jakub@redhat.com> + PR c++/71446 + * call.c (filed_in_pset): Change pset from hash_set<tree> * to + hash_set<tree, true> &, adjust uses accordingly. + (build_aggr_conv): Change pset from hash_set<tree> * + to hash_set<tree, true>. Replace goto fail; with return NULL;, + adjust pset uses. + PR c++/89767 * parser.c (cp_parser_lambda_introducer): Add ids and first_capture_id variables, check for duplicates in this function. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index d1f5055..a4adab2 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -907,9 +907,9 @@ can_convert_array (tree atype, tree ctor, int flags, tsubst_flags_t complain) is in PSET. */ static bool -field_in_pset (hash_set<tree> *pset, tree field) +field_in_pset (hash_set<tree, true> &pset, tree field) { - if (pset->contains (field)) + if (pset.contains (field)) return true; if (ANON_AGGR_TYPE_P (TREE_TYPE (field))) for (field = TYPE_FIELDS (TREE_TYPE (field)); @@ -934,7 +934,7 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) conversion *c; tree field = next_initializable_field (TYPE_FIELDS (type)); tree empty_ctor = NULL_TREE; - hash_set<tree> *pset = NULL; + hash_set<tree, true> pset; /* We already called reshape_init in implicit_conversion. */ @@ -964,7 +964,7 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) complain); if (!ok) - goto fail; + return NULL; /* For unions, there should be just one initializer. */ if (TREE_CODE (type) == UNION_TYPE) { @@ -972,12 +972,10 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) i = 1; break; } - if (pset == NULL) - pset = new hash_set<tree>; - pset->add (idx); + pset.add (idx); } else - goto fail; + return NULL; } } @@ -987,7 +985,7 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) tree val; bool ok; - if (pset && field_in_pset (pset, field)) + if (pset.elements () && field_in_pset (pset, field)) continue; if (i < CONSTRUCTOR_NELTS (ctor)) { @@ -998,7 +996,7 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) val = get_nsdmi (field, /*ctor*/false, complain); else if (TYPE_REF_P (ftype)) /* Value-initialization of reference is ill-formed. */ - goto fail; + return NULL; else { if (empty_ctor == NULL_TREE) @@ -1014,22 +1012,15 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) complain); if (!ok) - goto fail; + return NULL; if (TREE_CODE (type) == UNION_TYPE) break; } if (i < CONSTRUCTOR_NELTS (ctor)) - { - fail: - if (pset) - delete pset; - return NULL; - } + return NULL; - if (pset) - delete pset; c = alloc_conversion (ck_aggr); c->type = type; c->rank = cr_exact; |