From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1499) id 75825384AB74; Mon, 22 Apr 2024 19:34:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 75825384AB74 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1713814486; bh=KdmpsZZjH1KpMhP+xkGy0T7SgMIAHJmRtKpDjg2nsGU=; h=From:To:Subject:Date:From; b=sDkTaPebpSd0CB/qlhBnMCQHYgJ4TZi97d39+bhXUkEvevzUvNBBhoZO+u0A4Ipt1 9/ZOygrhDYK/Bid+cGkBAVKYmiKQQiiCXLBwTPBr+QH95AQuF/YaOzJ6wAcYKFZpN3 USuslCElKsGKOsdE7zIFgqCcR8iNH4eUPOvAF/9A= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Gaius Mulley To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-10080] PR modula2/114811 string set incl ICE bugfix X-Act-Checkin: gcc X-Git-Author: Gaius Mulley X-Git-Refname: refs/heads/master X-Git-Oldrev: 7ef139146a8923a8719873ca3fdae175668e8d63 X-Git-Newrev: b909daa5b67317e46543a7b2ed76e82298645cf6 Message-Id: <20240422193446.75825384AB74@sourceware.org> Date: Mon, 22 Apr 2024 19:34:46 +0000 (GMT) List-Id: https://gcc.gnu.org/g:b909daa5b67317e46543a7b2ed76e82298645cf6 commit r14-10080-gb909daa5b67317e46543a7b2ed76e82298645cf6 Author: Gaius Mulley Date: Mon Apr 22 20:34:11 2024 +0100 PR modula2/114811 string set incl ICE bugfix This patch corrects gm2-torture.exp to recognize an ICE in the fail case as a negative result. The patch also fixes FoldBinarySet so that the types are only checked once the operands have been resolved. Without this patch gcc/testsuite/gm2/iso/fail/badexpression2.mod would cause an ICE. gcc/m2/ChangeLog: PR modula2/114811 * gm2-compiler/M2GenGCC.mod (FoldBinarySet): Add condition checking to ensure op2 and op3 are fully resolved before type checking is performed. gcc/testsuite/ChangeLog: PR modula2/114811 * lib/gm2-torture.exp: Correct regexp checking for internal compiler error strings in compiler output. Signed-off-by: Gaius Mulley Diff: --- gcc/m2/gm2-compiler/M2GenGCC.mod | 43 +++++++++++++++++++++------------------ gcc/testsuite/lib/gm2-torture.exp | 7 ++++--- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index da52c924974..26ed399b24c 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -5000,29 +5000,32 @@ BEGIN TryDeclareConstant(tokenno, op3) ; location := TokenToLocation(tokenno) ; - IF CheckBinaryExpressionTypes (quad, p) + IF GccKnowsAbout(op2) AND GccKnowsAbout(op3) THEN - IF IsConst(op2) AND IsConstSet(op2) AND - IsConst(op3) AND IsConstSet(op3) AND - IsConst(op1) + IF CheckBinaryExpressionTypes (quad, p) THEN - IF IsValueSolved(op2) AND IsValueSolved(op3) + IF IsConst(op2) AND IsConstSet(op2) AND + IsConst(op3) AND IsConstSet(op3) AND + IsConst(op1) THEN - Assert(MixTypes(FindType(op3), FindType(op2), tokenno)#NulSym) ; - PutConst(op1, MixTypes(FindType(op3), FindType(op2), tokenno)) ; - PushValue(op2) ; - PushValue(op3) ; - op(tokenno) ; - PopValue(op1) ; - PushValue(op1) ; - PutConstSet(op1) ; - AddModGcc(op1, - DeclareKnownConstant(location, - Mod2Gcc(GetType(op3)), - PopSetTree(tokenno))) ; - p(op1) ; - NoChange := FALSE ; - SubQuad(quad) + IF IsValueSolved(op2) AND IsValueSolved(op3) + THEN + Assert(MixTypes(FindType(op3), FindType(op2), tokenno)#NulSym) ; + PutConst(op1, MixTypes(FindType(op3), FindType(op2), tokenno)) ; + PushValue(op2) ; + PushValue(op3) ; + op(tokenno) ; + PopValue(op1) ; + PushValue(op1) ; + PutConstSet(op1) ; + AddModGcc(op1, + DeclareKnownConstant(location, + Mod2Gcc(GetType(op3)), + PopSetTree(tokenno))) ; + p(op1) ; + NoChange := FALSE ; + SubQuad(quad) + END END END END diff --git a/gcc/testsuite/lib/gm2-torture.exp b/gcc/testsuite/lib/gm2-torture.exp index 090929954ca..c29b0b4d1a0 100644 --- a/gcc/testsuite/lib/gm2-torture.exp +++ b/gcc/testsuite/lib/gm2-torture.exp @@ -138,7 +138,7 @@ proc gm2-torture-compile { src option } { proc gm2_check_compile_fail {testcase option objname gcc_output} { global tool; - set fatal_signal "*cc: Internal compiler error: program*got fatal signal" + set fatal_signal "*nternal compiler error: program*got fatal signal" if [string match "$fatal_signal 6" $gcc_output] then { ${tool}_fail $testcase "Got Signal 6, $option" @@ -170,8 +170,9 @@ proc gm2_check_compile_fail {testcase option objname gcc_output} { regsub -all -- "\[\r\n\]*" $gcc_output "" gcc_output # check for any internal error - if { [string match "internal error" $gcc_output] || - [string match "internal compiler error" $gcc_output] } then { + if { [string match "*internal error*" $gcc_output] || + [string match "*internal compiler error*" $gcc_output] } then { + puts stderr "ICE: " ${tool}_fail $testcase $option return 0 }