aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-11-17 16:40:48 -0500
committerJason Merrill <jason@gcc.gnu.org>2016-11-17 16:40:48 -0500
commit07a67f7b09745a86d8890f09b7d1260da6f41103 (patch)
tree6c81364d845da88c0637c29fa0257db0c3d688ba /gcc
parentd168b3daa6f5aad0f5d57b9ac814dcd6e8243c61 (diff)
downloadgcc-07a67f7b09745a86d8890f09b7d1260da6f41103.zip
gcc-07a67f7b09745a86d8890f09b7d1260da6f41103.tar.gz
gcc-07a67f7b09745a86d8890f09b7d1260da6f41103.tar.bz2
PR c++/78369 - {} as default argument
* call.c (build_special_member_call): Handle CONSTRUCTOR. From-SVN: r242562
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/call.c3
-rw-r--r--gcc/testsuite/g++.dg/overload/defarg11.C11
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5775ba6..50d0ae2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2016-11-17 Jason Merrill <jason@redhat.com>
+ PR c++/78369 - {} as default argument
+ * call.c (build_special_member_call): Handle CONSTRUCTOR.
+
PR c++/68377
* parser.c (cp_parser_fold_expression): Check TREE_NO_WARNING.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index f6f4590..d25e2e7 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -8317,7 +8317,8 @@ build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
if (!reference_related_p (class_type, TREE_TYPE (arg)))
arg = perform_implicit_conversion_flags (class_type, arg,
tf_warning, flags);
- if (TREE_CODE (arg) == TARGET_EXPR
+ if ((TREE_CODE (arg) == TARGET_EXPR
+ || TREE_CODE (arg) == CONSTRUCTOR)
&& (same_type_ignoring_top_level_qualifiers_p
(class_type, TREE_TYPE (arg))))
{
diff --git a/gcc/testsuite/g++.dg/overload/defarg11.C b/gcc/testsuite/g++.dg/overload/defarg11.C
new file mode 100644
index 0000000..26fac6e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/overload/defarg11.C
@@ -0,0 +1,11 @@
+// PR c++/78369
+// { dg-do compile { target c++11 } }
+
+struct A { };
+inline void f(struct A a = {}) {}
+
+int main()
+{
+ f();
+ return 0;
+}