On Tue, Oct 17, 2023 at 09:35:21PM +1100, Nathaniel Shead wrote:
> Marek pointed out in another patch of mine [1] that I was missing an
> auto_diagnostic_group to correctly associate informative notes with
> their errors in structured error outputs. This patch goes through
> constexpr.cc to correct this in other locations which seem to have the
> same issue.

Thanks for the patch.  I went through all of them and they all seem correct.

So, LGTM, but can't approve.
 
> [1]: https://gcc.gnu.org/pipermail/gcc-patches/2023-October/632653.html
> 
> Bootstrapped and regtested on x86_64-pc-linux-gnu.
> 
> -- >8 --
> 
> gcc/cp/ChangeLog:
> 
>       * constexpr.cc (cxx_eval_dynamic_cast_fn): Add missing
>       auto_diagnostic_group.
>       (cxx_eval_call_expression): Likewise.
>       (diag_array_subscript): Likewise.
>       (outside_lifetime_error): Likewise.
>       (potential_constant_expression_1): Likewise.
> 
> Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
> ---
>  gcc/cp/constexpr.cc | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
> index dde4fec4a44..7c8f2cc189d 100644
> --- a/gcc/cp/constexpr.cc
> +++ b/gcc/cp/constexpr.cc
> @@ -2437,6 +2437,7 @@ cxx_eval_dynamic_cast_fn (const constexpr_ctx *ctx, 
> tree call,
>         {
>           if (!ctx->quiet)
>             {
> +             auto_diagnostic_group d;
>               error_at (loc, "reference %<dynamic_cast%> failed");
>               inform (loc, "dynamic type %qT of its operand does "
>                       "not have a base class of type %qT",
> @@ -2492,6 +2493,7 @@ cxx_eval_dynamic_cast_fn (const constexpr_ctx *ctx, 
> tree call,
>           {
>             if (!ctx->quiet)
>               {
> +               auto_diagnostic_group d;
>                 error_at (loc, "reference %<dynamic_cast%> failed");
>                 inform (loc, "static type %qT of its operand is a "
>                         "non-public base class of dynamic type %qT",
> @@ -2524,6 +2526,7 @@ cxx_eval_dynamic_cast_fn (const constexpr_ctx *ctx, 
> tree call,
>       {
>         if (!ctx->quiet)
>           {
> +           auto_diagnostic_group d;
>             error_at (loc, "reference %<dynamic_cast%> failed");
>             inform (loc, "static type %qT of its operand is a non-public"
>                     " base class of dynamic type %qT", objtype, mdtype);
> @@ -2545,6 +2548,7 @@ cxx_eval_dynamic_cast_fn (const constexpr_ctx *ctx, 
> tree call,
>       {
>         if (!ctx->quiet)
>           {
> +           auto_diagnostic_group d;
>             error_at (loc, "reference %<dynamic_cast%> failed");
>             if (b_kind == bk_ambig)
>               inform (loc, "%qT is an ambiguous base class of dynamic "
> @@ -2822,6 +2826,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, 
> tree t,
>                       {
>                         if (!ctx->quiet)
>                           {
> +                           auto_diagnostic_group d;
>                             error_at (loc, "array deallocation of object "
>                                            "allocated with non-array "
>                                            "allocation");
> @@ -2844,6 +2849,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, 
> tree t,
>                       {
>                         if (!ctx->quiet)
>                           {
> +                           auto_diagnostic_group d;
>                             error_at (loc, "non-array deallocation of "
>                                            "object allocated with array "
>                                            "allocation");
> @@ -4193,6 +4199,7 @@ diag_array_subscript (location_t loc, const 
> constexpr_ctx *ctx, tree array, tree
>        STRIP_ANY_LOCATION_WRAPPER (array);
>        if (DECL_P (array))
>       {
> +       auto_diagnostic_group d;
>         if (TYPE_DOMAIN (arraytype))
>           error_at (loc, "array subscript value %qE is outside the bounds "
>                     "of array %qD of type %qT", sidx, array, arraytype);
> @@ -5838,6 +5845,7 @@ cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
>  static void
>  outside_lifetime_error (location_t loc, tree r)
>  {
> +  auto_diagnostic_group d;
>    if (DECL_NAME (r) == heap_deleted_identifier)
>      {
>        /* Provide a more accurate message for deleted variables.  */
> @@ -9460,6 +9468,7 @@ potential_constant_expression_1 (tree t, bool 
> want_rval, bool strict, bool now,
>             if (flags & tf_error)
>               {
>                 tree cap = DECL_CAPTURED_VARIABLE (t);
> +               auto_diagnostic_group d;
>                 if (constexpr_error (input_location, fundef_p,
>                                      "lambda capture of %qE is not a "
>                                      "constant expression", cap)
> -- 
> 2.42.0
> 

Marek

Reply via email to