diff options
author | Jason Merrill <jason@redhat.com> | 2010-09-06 00:49:33 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-09-06 00:49:33 -0400 |
commit | 1c53d72bec3e943a4f57f9b5530626a2e6882eef (patch) | |
tree | 415af281e90a9fe5a6b85fcc53d69d7de9260fd0 /gcc | |
parent | be2b93e68af97a17f24c8f0a5695118502f1a71b (diff) | |
download | gcc-1c53d72bec3e943a4f57f9b5530626a2e6882eef.zip gcc-1c53d72bec3e943a4f57f9b5530626a2e6882eef.tar.gz gcc-1c53d72bec3e943a4f57f9b5530626a2e6882eef.tar.bz2 |
call.c (implicit_conversion): Fix value-init of enums.
* call.c (implicit_conversion): Fix value-init of enums.
(convert_like_real): Likewise.
From-SVN: r163897
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/call.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist42.C | 13 |
4 files changed, 20 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 58bcab4..389842d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2010-09-06 Jason Merrill <jason@redhat.com> + * call.c (implicit_conversion): Fix value-init of enums. + (convert_like_real): Likewise. + * decl.c (cp_finish_decl): Don't change init for auto deduction. * pt.c (fold_non_dependent_expr_sfinae): Split out from... diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 36f5a55..54a711a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1457,7 +1457,7 @@ implicit_conversion (tree to, tree from, tree expr, bool c_cast_p, tree elt; if (nelts == 0) - elt = integer_zero_node; + elt = build_value_init (to, tf_none); else if (nelts == 1) elt = CONSTRUCTOR_ELT (expr, 0)->value; else @@ -5050,7 +5050,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, { int nelts = CONSTRUCTOR_NELTS (expr); if (nelts == 0) - expr = integer_zero_node; + expr = build_value_init (totype, tf_warning_or_error); else if (nelts == 1) expr = CONSTRUCTOR_ELT (expr, 0)->value; else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2cfe379..da06cd3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2010-09-06 Jason Merrill <jason@redhat.com> + * g++.dg/cpp0x/initlist42.C: New. + * g++.dg/cpp0x/auto19.C: New. * g++.dg/template/sfinae25.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist42.C b/gcc/testsuite/g++.dg/cpp0x/initlist42.C new file mode 100644 index 0000000..e63959d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist42.C @@ -0,0 +1,13 @@ +// { dg-options -std=c++0x } + +enum Unscoped { }; +enum class Scoped { }; + +Unscoped bar(Unscoped x) { return x; } +Scoped bar(Scoped x) { return x; } + +auto var1u = bar(Unscoped()); // OK +auto var1s = bar(Scoped()); // OK + +auto var2u = bar(Unscoped{}); // #1 Error, but should work +auto var2s = bar(Scoped{}); // #2 Error, but should work |