aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-fold.cc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2025-09-02 15:58:26 -0700
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2025-09-02 15:58:26 -0700
commit071b4126c613881f4cb25b4e5c39032964827f88 (patch)
tree7ed805786566918630d1d617b1ed8f7310f5fd8e /gcc/c/c-fold.cc
parent845d23f3ea08ba873197c275a8857eee7edad996 (diff)
parentcaa1c2f42691d68af4d894a5c3e700ecd2dba080 (diff)
downloadgcc-devel/gfortran-test.zip
gcc-devel/gfortran-test.tar.gz
gcc-devel/gfortran-test.tar.bz2
Merge branch 'master' into gfortran-testdevel/gfortran-test
Diffstat (limited to 'gcc/c/c-fold.cc')
-rw-r--r--gcc/c/c-fold.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/c/c-fold.cc b/gcc/c/c-fold.cc
index d54ab3c..3f6e4b46 100644
--- a/gcc/c/c-fold.cc
+++ b/gcc/c/c-fold.cc
@@ -369,7 +369,25 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
|| TREE_CODE (op1) != INTEGER_CST))
goto out;
- if (op0 != orig_op0 || op1 != orig_op1 || in_init)
+ if (TREE_CODE_CLASS (code) == tcc_comparison
+ && TREE_CODE (TREE_TYPE (op0)) == NULLPTR_TYPE
+ && TREE_CODE (TREE_TYPE (op1)) == NULLPTR_TYPE)
+ {
+ switch (code)
+ {
+ case EQ_EXPR:
+ ret = constant_boolean_node (true, TREE_TYPE (expr));
+ break;
+ case NE_EXPR:
+ ret = constant_boolean_node (false, TREE_TYPE (expr));
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ ret = omit_two_operands_loc (loc, TREE_TYPE (expr), ret,
+ op0, op1);
+ }
+ else if (op0 != orig_op0 || op1 != orig_op1 || in_init)
ret = in_init
? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
: fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);