commit 280f0ea9609c903eafe6107b4672ed45ba6c5f21 (tree)
parent c151f6543adbc99ce9b6001eb5f4be0219593556
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date: Mon, 23 Feb 2026 07:47:08 +0000
sema: fix cppcheck lint warnings
- autoVariables: heap-allocate cross-module source_dir copy instead of
assigning pointer to local stack array
- identicalInnerCondition: simplify log2_int_ceil by removing redundant
inner check (v > 0 always true when type_bits > 0)
- knownConditionTrueFalse: remove redundant !is_cross_module guard in
else-if branch (always true since if-branch didn't execute)
- variableScope: narrow scope of di, field_name, ei variables
- unreadVariable: remove dead ei++ increment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat:
1 file changed, 19 insertions(+), 20 deletions(-)
diff --git a/stage0/sema.c b/stage0/sema.c
@@ -2240,12 +2240,9 @@ static uint32_t findDeclInstByNameInZir(
uint32_t payload = zir->inst_datas[di_inst].declaration.payload_index;
uint32_t flags_1 = zir->extra[payload + 5];
uint32_t id = (flags_1 >> 27) & 0x1F;
- uint32_t di = payload + 6;
uint32_t name_idx = 0;
- if (declIdHasName(id)) {
- name_idx = zir->extra[di];
- di++;
- }
+ if (declIdHasName(id))
+ name_idx = zir->extra[payload + 6];
if (name_idx == 0)
continue;
const char* name = (const char*)&zir->string_bytes[name_idx];
@@ -2256,6 +2253,7 @@ static uint32_t findDeclInstByNameInZir(
}
// findFuncInstInZir: find a func/func_fancy instruction by name in a ZIR.
+
// Scans the ZIR's struct_decl (inst 0) for a declaration matching the
// given name, then searches its value body for a func instruction.
// Uses the same parsing as zirStructDecl.
@@ -3103,12 +3101,12 @@ static AirInstRef zirCall(
} else if (base_import && nfields == 1) {
// Single-level: e.g. const panic = common.panic;
// fields[0] = "panic"
- const char* field_name = fields[0];
Ast base_ast;
memset(&base_ast, 0, sizeof(base_ast));
Zir base_zir = loadStdImportZir(sema->module_root,
sema->source_dir, base_import, &base_ast);
if (base_zir.inst_len > 0) {
+ const char* field_name = fields[0];
func_inst = findFuncInstInZir(&base_zir, field_name);
if (func_inst != UINT32_MAX) {
saved_code = sema->code;
@@ -3364,9 +3362,8 @@ static AirInstRef zirCall(
// field_val(decl_val("std"), "math"), "F80")
// callee_name = "fromFloat"
// Handles: std.math.F80.fromFloat(...)
- } else if (!is_cross_module
- && (lt == ZIR_INST_FIELD_VAL
- || lt == ZIR_INST_FIELD_PTR)) {
+ } else if (lt == ZIR_INST_FIELD_VAL
+ || lt == ZIR_INST_FIELD_PTR) {
uint32_t lp
= sema->code.inst_datas[li].pl_node.payload_index;
uint32_t lhs2_ref = sema->code.extra[lp];
@@ -4027,13 +4024,10 @@ static AirInstRef zirCall(
if (type_bits > 0) {
// log2_int_ceil: smallest n such that 2^n >= bits.
uint32_t n = 0;
- uint32_t v = type_bits;
- if (v > 0) {
- v--;
- while (v > 0) {
- n++;
- v >>= 1;
- }
+ uint32_t v = type_bits - 1;
+ while (v > 0) {
+ n++;
+ v >>= 1;
}
if (n == 0)
n = 1; // Log2Int minimum is u1
@@ -4619,7 +4613,11 @@ static AirInstRef zirCall(
populateDeclTableFromZir(sema, &import_zir);
if (import_source_dir[0]) {
saved_source_dir = sema->source_dir;
- sema->source_dir = import_source_dir;
+ size_t len = strlen(import_source_dir) + 1;
+ char* dir_copy = (char*)malloc(len);
+ assert(dir_copy);
+ memcpy(dir_copy, import_source_dir, len);
+ sema->source_dir = dir_copy;
}
}
@@ -4635,8 +4633,10 @@ static AirInstRef zirCall(
memcpy(sema->decl_insts, saved_decl_insts,
saved_num_decls * sizeof(uint32_t));
sema->num_decls = saved_num_decls;
- if (saved_source_dir)
+ if (saved_source_dir) {
+ free((char*)sema->source_dir);
sema->source_dir = saved_source_dir;
+ }
}
sema->fn_ret_ty = saved_fn_ret_ty;
@@ -6620,10 +6620,9 @@ static bool analyzeBodyInner(
uint16_t small = sema->code.inst_datas[inst].extended.small;
uint32_t payload_index
= sema->code.inst_datas[inst].extended.operand;
- uint32_t ei = payload_index + 1; // skip src_node
if (small & 0x1) { // has_type
+ uint32_t ei = payload_index + 1; // skip src_node
ZirInstRef type_ref = sema->code.extra[ei];
- ei++;
AirInstRef resolved = resolveInst(sema, type_ref);
TypeIndex elem_ty = IP_INDEX_VOID_TYPE;
if (AIR_REF_IS_IP(resolved))