Bug Summary

File:src/of_hfold.c
Warning:line 69, column 2
Value stored to 'formats' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name of_hfold.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/kfp/aldor/aldor/aldor/src -fcoverage-compilation-dir=/home/kfp/aldor/aldor/aldor/src -resource-dir /usr/local/lib/clang/18 -D PACKAGE_NAME="aldor" -D PACKAGE_TARNAME="aldor" -D PACKAGE_VERSION="1.4.0" -D PACKAGE_STRING="aldor 1.4.0" -D PACKAGE_BUGREPORT="aldor@xinutec.org" -D PACKAGE_URL="" -D PACKAGE="aldor" -D VERSION="1.4.0" -D YYTEXT_POINTER=1 -D HAVE_STDIO_H=1 -D HAVE_STDLIB_H=1 -D HAVE_STRING_H=1 -D HAVE_INTTYPES_H=1 -D HAVE_STDINT_H=1 -D HAVE_STRINGS_H=1 -D HAVE_SYS_STAT_H=1 -D HAVE_SYS_TYPES_H=1 -D HAVE_UNISTD_H=1 -D STDC_HEADERS=1 -D HAVE_LIBREADLINE=1 -D HAVE_READLINE_READLINE_H=1 -D HAVE_READLINE_HISTORY=1 -D HAVE_READLINE_HISTORY_H=1 -D USE_GLOOP_SHELL=1 -D GENERATOR_COROUTINES=0 -D HAVE_DLFCN_H=1 -D LT_OBJDIR=".libs/" -I . -D VCSVERSION="2c53e759f1e00e345f8b172e7139debda72fda13" -internal-isystem /usr/local/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O0 -Wno-empty-body -Wno-enum-compare -Wno-missing-field-initializers -Wno-unused -Wno-unused-parameter -Wno-error=format -Wno-error=type-limits -Wno-error=strict-aliasing -Wno-sign-compare -Wno-error=shift-negative-value -Wno-error=clobbered -std=c99 -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/scan-build-2026-01-15-223856-845667-1 -x c of_hfold.c
1/*****************************************************************************
2 *
3 * hfold.c: Foam syme hash constant folding
4 *
5 * Copyright (c) 1990-2007 Aldor Software Organization Ltd (Aldor.org).
6 *
7 ****************************************************************************/
8
9/*
10 * Takes foam, assumed to be decorated with symes and
11 * replaces calls to domainGetHash! with the expected result
12 * of the call, and replaces foamPRefs with the value of the
13 * PRef slot which should be held in the syme.
14 *
15 * To fix: The hashNum slot could, with a bit of work, be held by a prog.
16 *
17 */
18
19#include "gf_rtime.h"
20#include "lib.h"
21#include "of_hfold.h"
22#include "of_util.h"
23#include "of_inlin.h"
24#include "optinfo.h"
25#include "stab.h"
26#include "strops.h"
27
28Bool hfoldDebug = false((int) 0);
29#define hfoldDEBUGDEBUG_IF(hfold) afprintf DEBUG_IF(hfold) afprintf
30
31/*****************************************************************************
32 *
33 * :: Local structures
34 *
35 ****************************************************************************/
36
37/*****************************************************************************
38 *
39 * :: Local function declarations
40 *
41 ****************************************************************************/
42
43localstatic void hfoldProg (Foam);
44localstatic Foam hfoldExpr (Foam);
45localstatic Foam hfoldPRef (Foam);
46localstatic Foam hfoldCCall (Foam);
47localstatic Foam hfoldSet (Foam);
48localstatic Bool hfoldIsDomHash (Foam);
49localstatic void hfoldInit (Foam);
50
51/*****************************************************************************
52 *
53 * :: Local Constants
54 *
55 ****************************************************************************/
56
57static int hfoldDomainHashGlobal;
58static OptInfo hfoldProgInfo;
59static Stab hfoldStab;
60static int hfoldNumLocals;
61
62void
63hfoldUnit(Foam unit)
64{
65 Foam defs, formats;
66 int i;
67
68 defs = unit->foamUnit.defs;
69 formats = unit->foamUnit.formats;
Value stored to 'formats' is never read
70
71 hfoldInit(foamUnitGlobals(unit)((((unit)->foamUnit.formats)->foamGen.argv)[0].code));
72
73 for (i = 0; i < foamArgc(defs)((defs)->hdr.argc); i++) {
74 Foam def = defs->foamDDef.argv[i];
75 if (foamTag(def->foamDef.rhs)((def->foamDef.rhs)->hdr.tag) == FOAM_Prog)
76 hfoldProg(def->foamDef.rhs);
77 }
78 assert(foamAudit(unit))do { if (!(foamAudit(unit))) _do_assert(("foamAudit(unit)"),"of_hfold.c"
,78); } while (0)
;
79}
80
81localstatic void
82hfoldInit(Foam globals)
83{
84 int i;
85
86
87 /* !! Should put runtime strings into gf_rtime.h */
88 for (i=0; i<foamDDeclArgc(globals)(((globals)->hdr.argc) - (1)); i++) {
89 Foam decl = globals->foamDDecl.argv[i];
90 if (strEqual(decl->foamDecl.id, "domainHash!"))
91 break;
92 }
93 if (i == foamDDeclArgc(globals)(((globals)->hdr.argc) - (1)))
94 hfoldDomainHashGlobal = -1;
95 else
96 hfoldDomainHashGlobal = i;
97
98}
99
100
101localstatic void
102hfoldProg(Foam prog)
103{
104 Foam body;
105 int i;
106
107 hfoldProgInfo = foamOptInfo(prog)((prog)->hdr.info.opt);
108
109 if (!hfoldProgInfo) return; /* saved files have no foamOptInfo */
110
111 hfoldStab = hfoldProgInfo->stab ? hfoldProgInfo->stab : stabFile();
112
113 /* No Stab => nothing to do */
114 if (!hfoldStab)
115 return;
116 hfoldNumLocals = foamDDeclArgc(prog->foamProg.locals)(((prog->foamProg.locals)->hdr.argc) - (1));
117
118 body = prog->foamProg.body;
119 for (i=0; i<foamArgc(body)((body)->hdr.argc); i++) {
120 body->foamSeq.argv[i] = hfoldExpr(body->foamSeq.argv[i]);
121 }
122
123 hfoldStab = NULL((void*)0);
124 hfoldProgInfo = NULL((void*)0);
125}
126
127localstatic Foam
128hfoldExpr(Foam foam)
129{
130 Foam new, newFoam = foam;
131
132 /* What about FOAM_Def nodes? */
133 if (foamTag(foam)((foam)->hdr.tag) == FOAM_Set) {
134 newFoam = hfoldSet(foam);
135 if (foam != newFoam) {
136 foamFree(foam);
137 return newFoam;
138 }
139 /* NEVER hfold PRef target */
140 /* ASSUME we never have a PRef in multi-lhs */
141 if (foamTag(foam->foamSet.lhs)((foam->foamSet.lhs)->hdr.tag) == FOAM_PRef) {
142 /* hfold the rhs of the set just in case */
143 Foam foamRhs = foam->foamSet.rhs;
144 newFoam = hfoldExpr(foamRhs);
145 if (newFoam != foamRhs) {
146 foamFree(foamRhs);
147 foam->foamSet.rhs = newFoam;
148 }
149 return foam;
150 }
151 }
152
153 foamIter(foam, arg, { new = hfoldExpr(*arg);{ { String argf = (foamInfoTable [(int)(((foam)->hdr.tag))
-(int)FOAM_START]).argf; Length _i; for (_i = 0; _i < ((foam
)->hdr.argc); _i++, argf++) { if (*argf == '*') argf--; if
(*argf == 'C') { Foam *arg = (Foam *) ((foam)->foamGen.argv
)+_i; { { new = hfoldExpr(*arg); *arg = new; }; }; } } }; }
154 *arg = new; }){ { String argf = (foamInfoTable [(int)(((foam)->hdr.tag))
-(int)FOAM_START]).argf; Length _i; for (_i = 0; _i < ((foam
)->hdr.argc); _i++, argf++) { if (*argf == '*') argf--; if
(*argf == 'C') { Foam *arg = (Foam *) ((foam)->foamGen.argv
)+_i; { { new = hfoldExpr(*arg); *arg = new; }; }; } } }; }
;
155 switch(foamTag(foam)((foam)->hdr.tag)) {
156 case FOAM_PRef:
157 newFoam = hfoldPRef(foam);
158 break;
159 case FOAM_CCall:
160 newFoam = hfoldCCall(foam);
161 break;
162 default:
163 break;
164 }
165 if (newFoam != foam)
166 foamFreeNode(foam);
167
168 return newFoam;
169}
170
171localstatic Foam
172hfoldCCall(Foam foam)
173{
174 Syme syme;
175 Foam ref;
176
177 if (!hfoldIsDomHash(foam->foamCCall.op))
178 return foam;
179
180 ref = foam->foamCCall.argv[0];
181
182 syme = foamSyme(ref)((ref)->hdr.syme);
183
184 if (syme && symeHashNum(syme)((int) (SYFI_HashNum < (8 * sizeof(int)) && !(((((
syme)->kind == SYME_Trigger ? libGetAllSymes((syme)->lib
) : ((void*)0)), (syme))->hasmask) & (1 << (SYFI_HashNum
))) ? (symeFieldInfo[SYFI_HashNum].def) : (((((syme)->kind
== SYME_Trigger ? libGetAllSymes((syme)->lib) : ((void*)0
)), (syme))->locmask) & (1 << (SYFI_HashNum))) ?
((((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme)
->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme,SYFI_HashNum
)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn(syme
,SYFI_HashNum)))
&& inlInlinable(hfoldStab, syme))
185 foam = foamNewSInt(symeHashNum(syme))foamNew(FOAM_SInt, 1, (AInt)(((int) (SYFI_HashNum < (8 * sizeof
(int)) && !(((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->hasmask) & (1
<< (SYFI_HashNum))) ? (symeFieldInfo[SYFI_HashNum].def
) : (((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme
)->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->locmask) & (1
<< (SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme
,SYFI_HashNum)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn
(syme,SYFI_HashNum)))))
;
186
187 return foam;
188}
189
190localstatic Foam
191hfoldPRef(Foam foam)
192{
193 Syme syme;
194 Foam prog;
195
196 if (foam->foamPRef.idx != 0)
197 return foam;
198
199 prog = foam->foamPRef.prog;
200
201 if (foamTag(prog)((prog)->hdr.tag) != FOAM_CProg)
202 return foam;
203
204 syme = foamSyme(prog->foamCProg.prog)((prog->foamCProg.prog)->hdr.syme);
205
206 if (syme && symeHashNum(syme)((int) (SYFI_HashNum < (8 * sizeof(int)) && !(((((
syme)->kind == SYME_Trigger ? libGetAllSymes((syme)->lib
) : ((void*)0)), (syme))->hasmask) & (1 << (SYFI_HashNum
))) ? (symeFieldInfo[SYFI_HashNum].def) : (((((syme)->kind
== SYME_Trigger ? libGetAllSymes((syme)->lib) : ((void*)0
)), (syme))->locmask) & (1 << (SYFI_HashNum))) ?
((((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme)
->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme,SYFI_HashNum
)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn(syme
,SYFI_HashNum)))
&& inlInlinable(hfoldStab, syme))
207 foam = foamNewSInt(symeHashNum(syme))foamNew(FOAM_SInt, 1, (AInt)(((int) (SYFI_HashNum < (8 * sizeof
(int)) && !(((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->hasmask) & (1
<< (SYFI_HashNum))) ? (symeFieldInfo[SYFI_HashNum].def
) : (((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme
)->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->locmask) & (1
<< (SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme
,SYFI_HashNum)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn
(syme,SYFI_HashNum)))))
;
208
209 return foam;
210}
211
212
213localstatic Foam
214hfoldSet(Foam foam)
215{
216 Syme syme;
217 Foam rhs = foam->foamSet.rhs;
218 Foam ref;
219
220 if (foamTag(rhs)((rhs)->hdr.tag) != FOAM_CCall)
221 return foam;
222
223 if (!hfoldIsDomHash(rhs->foamCCall.op))
224 return foam;
225
226 ref = rhs->foamCCall.argv[0];
227
228 syme = foamSyme(ref)((ref)->hdr.syme);
229
230 if (syme && symeHashNum(syme)((int) (SYFI_HashNum < (8 * sizeof(int)) && !(((((
syme)->kind == SYME_Trigger ? libGetAllSymes((syme)->lib
) : ((void*)0)), (syme))->hasmask) & (1 << (SYFI_HashNum
))) ? (symeFieldInfo[SYFI_HashNum].def) : (((((syme)->kind
== SYME_Trigger ? libGetAllSymes((syme)->lib) : ((void*)0
)), (syme))->locmask) & (1 << (SYFI_HashNum))) ?
((((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme)
->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme,SYFI_HashNum
)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn(syme
,SYFI_HashNum)))
&& inlInlinable(hfoldStab, syme))
231 foam->foamSet.rhs = foamNewSInt(symeHashNum(syme))foamNew(FOAM_SInt, 1, (AInt)(((int) (SYFI_HashNum < (8 * sizeof
(int)) && !(((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->hasmask) & (1
<< (SYFI_HashNum))) ? (symeFieldInfo[SYFI_HashNum].def
) : (((((syme)->kind == SYME_Trigger ? libGetAllSymes((syme
)->lib) : ((void*)0)), (syme))->locmask) & (1 <<
(SYFI_HashNum))) ? ((((((syme)->kind == SYME_Trigger ? libGetAllSymes
((syme)->lib) : ((void*)0)), (syme))->locmask) & (1
<< (SYFI_HashNum))) ? ((syme)->fieldv)[symeIndex(syme
,SYFI_HashNum)] : (symeFieldInfo[SYFI_HashNum].def)) : symeGetFieldFn
(syme,SYFI_HashNum)))))
;
232
233 return foam;
234}
235
236localstatic Bool
237hfoldIsDomHash(Foam foam)
238{
239 if (foamTag(foam)((foam)->hdr.tag) != FOAM_Glo)
240 return false((int) 0);
241
242 return (foam->foamGlo.index == hfoldDomainHashGlobal);
243}