[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2021-07-27 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

Andrew Pinski  changed:

   What|Removed |Added

   Target Milestone|--- |11.0

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-06-16 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

Marek Polacek  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #7 from Marek Polacek  ---
This should now work as expected.

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-06-16 Thread cvs-commit at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

--- Comment #6 from CVS Commits  ---
The master branch has been updated by Marek Polacek :

https://gcc.gnu.org/g:04afaf4575ff239279cfa34aff17101345451965

commit r11-1392-g04afaf4575ff239279cfa34aff17101345451965
Author: Marek Polacek 
Date:   Mon Jun 15 15:31:32 2020 -0400

c++: Don't allow designated initializers with non-aggregates [PR95369]

Another part of 95369 is that we accept designated initializers with
non-aggregate types.  That seems to be wrong since they're part of
aggregate initialization.  clang/icc also reject it.

There are multiple contexts where we can use designated initializers:
function-like casts, member list initializers, NTTP, etc.  I've adjusted
add_list_candidates and implicit_conversion_error in order to to detect
this case.

gcc/cp/ChangeLog:

PR c++/95369
* call.c (add_list_candidates): Return if a designated initializer
is used with a non-aggregate.
(implicit_conversion_error): Give an error for the case above.

gcc/testsuite/ChangeLog:

PR c++/95369
* g++.dg/cpp2a/desig11.C: Adjust dg-error.
* g++.dg/cpp2a/desig16.C: New test.

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-06-05 Thread cvs-commit at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

--- Comment #5 from CVS Commits  ---
The master branch has been updated by Marek Polacek :

https://gcc.gnu.org/g:cecc73af4980004502f4c327b6c639125defb379

commit r11-1010-gcecc73af4980004502f4c327b6c639125defb379
Author: Marek Polacek 
Date:   Fri Jun 5 14:22:35 2020 -0400

c++: Make braced-init-list as template arg work with aggr init [PR95369]

Barry pointed out to me that our braced-init-list as a template-argument
extension doesn't work as expected when we aggregate-initialize.  Since
aggregate list-initialization is a user-defined conversion sequence, we
allow it as part of a converted constant expression.

Co-authored-by: Jason Merrill 

gcc/cp/ChangeLog:

PR c++/95369
* call.c (build_converted_constant_expr_internal): Allow
list-initialization.

gcc/testsuite/ChangeLog:

PR c++/95369
* g++.dg/cpp2a/nontype-class38.C: New test.

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-05-28 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

Marek Polacek  changed:

   What|Removed |Added

   Last reconfirmed||2020-05-28
 Status|UNCONFIRMED |ASSIGNED
 Ever confirmed|0   |1
   Assignee|unassigned at gcc dot gnu.org  |mpolacek at gcc dot 
gnu.org

--- Comment #4 from Marek Polacek  ---
I think I have a patch.

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-05-27 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

--- Comment #3 from Marek Polacek  ---
I think the problem is that we never called digest_init prior calling
convert_nontype_argument.

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-05-27 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

--- Comment #2 from Marek Polacek  ---
This is not really about designated initializers; we wrongly reject this one
too:

struct S {
  unsigned a;
  unsigned b;
};

template struct X { };

void f()
{
  X<{ 1u, 2u }> x;
}

[Bug c++/95369] braced-init-list with designated initializers as template-argument rejected

2020-05-27 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95369

--- Comment #1 from Marek Polacek  ---
This is accepted fine (as it should be):

struct S {
  int a;
  int b;
};

int
main ()
{
  S s{.a = 1, .b = 2};
}