c++: tighten TMPL_ARGS_LEVEL macro
authorPatrick Palka <ppalka@redhat.com>
Thu, 12 May 2022 20:52:06 +0000 (16:52 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 12 May 2022 20:52:06 +0000 (16:52 -0400)
commit3e948d645bc9086eee28407fcc67d05b3450bb78
treeb455149506a401eb0f8438ebdd7e7c93789fdffb
parent995060aa5eb85a9a6d06c5cf9e87650522ccee3f
c++: tighten TMPL_ARGS_LEVEL macro

This patch makes TMPL_ARGS_LEVEL verify the level argument is valid when
the one-dimensional vector case.  Doing so uncovered a couple of latent
issues: in try_class_unification, we weren't correctly copying targs
when it's two-dimensional, and in unify_pack_expansion it seems an
inequality test needs to be reversed.  This patch fixes both issues, and
in passing makes the former function free the temporary copy of targs.

gcc/cp/ChangeLog:

* cp-tree.h (TMPL_ARGS_LEVEL): Assert LEVEL is 1 when
TMPL_ARGS_HAVE_MULTIPLE_LEVELS is false.
* pt.cc (try_class_unification): Correctly copy multidimensional
targs.  Free the copy of targs.
(unify_pack_expansion): Fix level comparison.
gcc/cp/cp-tree.h
gcc/cp/pt.cc