diff options
author | Jason Merrill <jason@redhat.com> | 2016-11-17 16:40:48 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-11-17 16:40:48 -0500 |
commit | 07a67f7b09745a86d8890f09b7d1260da6f41103 (patch) | |
tree | 6c81364d845da88c0637c29fa0257db0c3d688ba /gcc | |
parent | d168b3daa6f5aad0f5d57b9ac814dcd6e8243c61 (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/call.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/overload/defarg11.C | 11 |
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; +} |