From 3627b9a16c6f5164d3021eb1a8f845a6343a889a Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 27 Nov 1987 14:24:46 +0000 Subject: [PATCH] added use checking for types and constants, improved overflow checking --- lang/m2/comp/LLlex.c | 8 +++++++- lang/m2/comp/def.c | 3 +++ lang/m2/comp/enter.c | 1 - lang/m2/comp/scope.C | 2 +- lang/m2/comp/type.c | 1 + lang/m2/comp/walk.c | 4 ++-- 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lang/m2/comp/LLlex.c b/lang/m2/comp/LLlex.c index 4d48ebd9e..2b09703d1 100644 --- a/lang/m2/comp/LLlex.c +++ b/lang/m2/comp/LLlex.c @@ -493,7 +493,8 @@ lexwarning(W_ORDINARY, "character constant out of range"); } } else if (ch == 'D' && base == 10) { - if (sgnswtch != 0) { + if (sgnswtch != 0 || + tk->TOK_INT > max_int[(int)long_size]) { lexwarning(W_ORDINARY, "overflow in constant"); } toktype = longint_type; @@ -502,6 +503,11 @@ lexwarning(W_ORDINARY, "overflow in constant"); tk->TOK_INT<=max_int[(int)word_size]) { toktype = intorcard_type; } + else if (! chk_bounds(tk->TOK_INT, + full_mask[(int)word_size], + T_CARDINAL)) { +lexwarning(W_ORDINARY, "overflow in constant"); + } return tk->tk_symb = INTEGER; } diff --git a/lang/m2/comp/def.c b/lang/m2/comp/def.c index 5f2e8f5db..e8d10c15f 100644 --- a/lang/m2/comp/def.c +++ b/lang/m2/comp/def.c @@ -76,6 +76,9 @@ MkDef(id, scope, kind) df->df_next = id->id_def; id->id_def = df; if (kind == D_ERROR || kind == D_FORWARD) df->df_type = error_type; + if (kind & (D_TYPE|D_PROCEDURE|D_CONST)) { + df->df_flags = D_DEFINED; + } /* enter the definition in the list of definitions in this scope */ diff --git a/lang/m2/comp/enter.c b/lang/m2/comp/enter.c index 10e47f449..b2651fd75 100644 --- a/lang/m2/comp/enter.c +++ b/lang/m2/comp/enter.c @@ -129,7 +129,6 @@ EnterVarList(Idlist, type, local) for (; idlist; idlist = idlist->nd_right) { df = define(idlist->nd_IDF, CurrentScope, D_VARIABLE); df->df_type = type; - /* df->df_flags &= ~(D_USED | D_DEFINED); */ if (idlist->nd_left) { /* An address was supplied */ diff --git a/lang/m2/comp/scope.C b/lang/m2/comp/scope.C index 6b4a91c82..1ebc91175 100644 --- a/lang/m2/comp/scope.C +++ b/lang/m2/comp/scope.C @@ -187,7 +187,7 @@ Reverse(pdf) from this list. */ register t_def *df, *df1; -#define INTERESTING (D_MODULE|D_PROCEDURE|D_PROCHEAD|D_VARIABLE|D_IMPORTED) +#define INTERESTING (D_MODULE|D_PROCEDURE|D_PROCHEAD|D_VARIABLE|D_IMPORTED|D_TYPE|D_CONST) df = 0; df1 = *pdf; diff --git a/lang/m2/comp/type.c b/lang/m2/comp/type.c index 663efc150..539d1dad3 100644 --- a/lang/m2/comp/type.c +++ b/lang/m2/comp/type.c @@ -659,6 +659,7 @@ type_or_forward(ptp) same scope. */ df = define(nd->nd_IDF, CurrentScope, D_FORWTYPE); + df->df_flags |= D_USED | D_DEFINED; if (df->df_kind == D_TYPE) { (*ptp)->tp_next = df->df_type; diff --git a/lang/m2/comp/walk.c b/lang/m2/comp/walk.c index 7961ec792..0c23bf711 100644 --- a/lang/m2/comp/walk.c +++ b/lang/m2/comp/walk.c @@ -858,7 +858,7 @@ UseWarnings(df) register t_def *df; { if (is_anon_idf(df->df_idf)) return; - if (df->df_kind & (D_IMPORTED | D_VARIABLE | D_PROCEDURE)) { + if (df->df_kind & (D_IMPORTED | D_VARIABLE | D_PROCEDURE | D_CONST | D_TYPE)) { struct node *nd; if (df->df_flags & (D_EXPORTED | D_QEXPORTED)) return; @@ -879,7 +879,7 @@ UseWarnings(df) } df = df1; } - if (! (df->df_kind & (D_VARIABLE|D_PROCEDURE))) return; + if (! (df->df_kind & (D_VARIABLE|D_PROCEDURE|D_TYPE|D_CONST))) return; nd = df->df_scope->sc_end; if (! (df->df_flags & D_DEFINED)) { node_warning(nd, -- 2.34.1