aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-09-06 00:49:33 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-09-06 00:49:33 -0400
commit1c53d72bec3e943a4f57f9b5530626a2e6882eef (patch)
tree415af281e90a9fe5a6b85fcc53d69d7de9260fd0 /gcc
parentbe2b93e68af97a17f24c8f0a5695118502f1a71b (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/call.c4
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist42.C13
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