https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121478

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|tree-optimization           |c
             Status|NEW                         |ASSIGNED

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I am going to try to solve this tomorrow.

cp_fold does:
```
      /* decltype(nullptr) has only one value, so optimize away all comparisons
         with that type right away, keeping them in the IL causes troubles for
         various optimizations.  */
      if (COMPARISON_CLASS_P (org_x)
          && TREE_CODE (TREE_TYPE (op0)) == NULLPTR_TYPE
          && TREE_CODE (TREE_TYPE (op1)) == NULLPTR_TYPE)
        {
          switch (code)
            {
            case EQ_EXPR:
              x = constant_boolean_node (true, TREE_TYPE (x));
              break;
            case NE_EXPR:
              x = constant_boolean_node (false, TREE_TYPE (x));
              break;
            default:
              gcc_unreachable ();
            }
          return omit_two_operands_loc (loc, TREE_TYPE (x), x,
                                        op0, op1);
        }

```

And a few other things happen in the C++ front-end:
like in decay_conversion:
```
  if (NULLPTR_TYPE_P (type) && !TREE_SIDE_EFFECTS (exp))
    {
      mark_rvalue_use (exp, loc, reject_builtin);
      return nullptr_node;
    }
```

Or in convert_arg_to_ellipsis:
```
  else if (NULLPTR_TYPE_P (arg_type))
    {
      arg = mark_rvalue_use (arg);
      if (TREE_SIDE_EFFECTS (arg))
        {
          warning_sentinel w(warn_unused_result);
          arg = cp_build_compound_expr (arg, null_pointer_node, complain);
        }
      else
        arg = null_pointer_node;
    }
```

Reply via email to