From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1285) id E15543857C61; Mon, 10 May 2021 23:25:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E15543857C61 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Eric Botcazou To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-693] Remove call to gcc_unreachable in range-op.cc X-Act-Checkin: gcc X-Git-Author: Eric Botcazou X-Git-Refname: refs/heads/master X-Git-Oldrev: 151154a21da8b0784894b2463a117f4e283d5525 X-Git-Newrev: ead233e6ff01c0bcaffce567ef656259fcc3530d Message-Id: <20210510232555.E15543857C61@sourceware.org> Date: Mon, 10 May 2021 23:25:55 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2021 23:25:56 -0000 https://gcc.gnu.org/g:ead233e6ff01c0bcaffce567ef656259fcc3530d commit r12-693-gead233e6ff01c0bcaffce567ef656259fcc3530d Author: Eric Botcazou Date: Mon May 10 17:41:01 2021 +0200 Remove call to gcc_unreachable in range-op.cc The Ada testcase happens to stumble on the call to gcc_unreachable in operator_bitwise_xor::op1_range, but there is nothing wrong going on and it's safe to let it go through. gcc/ * range-op.cc (get_bool_state): Adjust head comment. (operator_not_equal::op1_range): Fix comment. (operator_bitwise_xor::op1_range): Remove call to gcc_unreachable. gcc/testsuite/ * gnat.dg/specs/opt5.ads: New test. * gnat.dg/specs/opt5_pkg.ads: New helper. Diff: --- gcc/range-op.cc | 11 +++++------ gcc/testsuite/gnat.dg/specs/opt5.ads | 25 +++++++++++++++++++++++++ gcc/testsuite/gnat.dg/specs/opt5_pkg.ads | 17 +++++++++++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/gcc/range-op.cc b/gcc/range-op.cc index ab8f4e211ac..742e54686b4 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -358,10 +358,8 @@ range_true_and_false (tree type) enum bool_range_state { BRS_FALSE, BRS_TRUE, BRS_EMPTY, BRS_FULL }; -// Return the summary information about boolean range LHS. Return an -// "interesting" range in R. For EMPTY or FULL, return the equivalent -// range for TYPE, for BRS_TRUE and BRS false, return the negation of -// the bool range. +// Return the summary information about boolean range LHS. If EMPTY/FULL, +// return the equivalent range for TYPE in R; if FALSE/TRUE, do nothing. static bool_range_state get_bool_state (irange &r, const irange &lhs, tree val_type) @@ -383,6 +381,7 @@ get_bool_state (irange &r, const irange &lhs, tree val_type) r.set_varying (val_type); return BRS_FULL; } + return BRS_TRUE; } @@ -538,7 +537,7 @@ operator_not_equal::op1_range (irange &r, tree type, break; case BRS_FALSE: - // If its true, the result is the same as OP2. + // If it's false, the result is the same as OP2. r = op2; break; @@ -2643,7 +2642,7 @@ operator_bitwise_xor::op1_range (irange &r, tree type, r = op2; break; default: - gcc_unreachable (); + break; } return true; } diff --git a/gcc/testsuite/gnat.dg/specs/opt5.ads b/gcc/testsuite/gnat.dg/specs/opt5.ads new file mode 100644 index 00000000000..09b8db54c56 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/opt5.ads @@ -0,0 +1,25 @@ +-- { dg-do compile } +-- { dg-options "-O2 -gnata -gnatVa" } + +with Opt5_Pkg; + +package Opt5 is + + type Object is new Opt5_Pkg.Object with private; + + Undefined : constant Object; + + overriding function Is_Defined (Self : Object) return Boolean; + + function Create (Sloc : Opt5_Pkg.Object) return Integer is (0) + with Pre => Sloc.Is_Defined; + +private + + type Object is new Opt5_Pkg.Object with null record; + + Undefined : constant Object := (Opt5_Pkg.Undefined with others => <>); + + overriding function Is_Defined (Self : Object) return Boolean is (Self /= Undefined); + +end Opt5; diff --git a/gcc/testsuite/gnat.dg/specs/opt5_pkg.ads b/gcc/testsuite/gnat.dg/specs/opt5_pkg.ads new file mode 100644 index 00000000000..a549f08a723 --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/opt5_pkg.ads @@ -0,0 +1,17 @@ +package Opt5_Pkg is + + type Object is tagged private; + + Undefined : constant Object; + + function Is_Defined (Self : Object) return Boolean; + +private + + type Object is tagged null record; + + Undefined : constant Object := (others => <>); + + function Is_Defined (Self : Object) return Boolean is (Self /= Undefined); + +end Opt5_Pkg;