From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1499) id EDB5F3858D32; Mon, 16 Jan 2023 18:10:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EDB5F3858D32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1673892629; bh=PGItGa+bCcJUaMStEF1ZZNDNRH4B10jVCFo40AEWn7M=; h=From:To:Subject:Date:From; b=lSguky0SnpcCxE5H/tFvWkDC1eVoRNoQSXoQ3zxLcjcJNkCalJxmNIJMNoC/b6FOo mMJWkCqJbd01r7c5PFN3FrDSLMag3wKXm2IPZ4KjexvMj9U+517KaZJ4R7i/YVgacV npds8CjrYH5cZmljZISLHnuNfrs+x4tOTTF4Nh3U= 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 r13-5216] Detect errors when dereferencing an undeclared variable. X-Act-Checkin: gcc X-Git-Author: Gaius Mulley X-Git-Refname: refs/heads/master X-Git-Oldrev: b1f30bf42d8d47228e52de998f3172b2f5dd7265 X-Git-Newrev: a0c595386fa322e1874d33742fc56c6a0c13c4a5 Message-Id: <20230116181029.EDB5F3858D32@sourceware.org> Date: Mon, 16 Jan 2023 18:10:29 +0000 (GMT) List-Id: https://gcc.gnu.org/g:a0c595386fa322e1874d33742fc56c6a0c13c4a5 commit r13-5216-ga0c595386fa322e1874d33742fc56c6a0c13c4a5 Author: Gaius Mulley Date: Mon Jan 16 18:09:04 2023 +0000 Detect errors when dereferencing an undeclared variable. Attempting to dereference an undeclared variable will cause an ICE. Also attempting to pass an undeclared variable as an array of type will also cause an ICE. This patch detects both conditions and generates an appropriate error. gcc/m2/ChangeLog: * gm2-compiler/M2Quads.mod (AssignUnboundedVar): Check Type against NulSym and call MetaErrorT1 if necessary. (AssignUnboundedNonVar): Check Type against NulSym and call MetaErrorT1 if necessary. (BuildDesignatorPointer): Check Type1 against NulSym and call MetaErrorT1 if necessary. Signed-off-by: Gaius Mulley Diff: --- gcc/m2/gm2-compiler/M2Quads.mod | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 263fb7c7417..a58de93e4a8 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -6327,7 +6327,10 @@ BEGIN ELSIF IsVar(Sym) THEN Type := GetDType(Sym) ; - IF IsUnbounded(Type) + IF Type = NulSym + THEN + MetaErrorT1 (tok, '{%1ad} has no type and cannot be passed to a VAR formal parameter', Sym) + ELSIF IsUnbounded(Type) THEN IF Type = GetSType (UnboundedSym) THEN @@ -6382,7 +6385,10 @@ BEGIN ELSIF IsVar (Sym) THEN Type := GetDType (Sym) ; - IF IsUnbounded (Type) + IF Type = NulSym + THEN + MetaErrorT1 (tok, '{%1ad} has no type and cannot be passed to a non VAR formal parameter', Sym) + ELSIF IsUnbounded (Type) THEN UnboundedNonVarLinkToArray (tok, Sym, ArraySym, UnboundedSym, ParamType, dim) ELSIF IsArray (Type) OR IsGenericSystemType (ParamType) @@ -11386,7 +11392,10 @@ VAR BEGIN PopTFrwtok (Sym1, Type1, rw, exprtok) ; Type1 := SkipType (Type1) ; - IF IsUnknown (Sym1) + IF Type1 = NulSym + THEN + MetaErrorT1 (ptrtok, '{%1ad} has no type and therefore cannot be dereferenced by ^', Sym1) + ELSIF IsUnknown (Sym1) THEN MetaError1 ('{%1EMad} is undefined and therefore {%1ad}^ cannot be resolved', Sym1) ELSIF IsPointer (Type1)