Skip to content

Commit dee8096

Browse files
committed
kleidiai: fix zero-size array declaration
1 parent a19bd6f commit dee8096

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

ggml/src/ggml-cpu/kleidiai/kernels.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
#include "kernels.h"
4141

42-
#define NELEMS(x) sizeof(x) / sizeof(*x)
42+
#define NELEMS(x) (sizeof(x) / sizeof(*x))
4343

4444
template<size_t(*Fn)(size_t,size_t,size_t)>
4545
static inline size_t kernel_offs_fn3(size_t a, size_t b, size_t c) {
@@ -635,6 +635,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = {
635635
},
636636
#endif
637637
#endif
638+
{ /* Sentinel */ 0 }
638639
};
639640

640641
static ggml_kleidiai_kernels gemm_gemv_kernels_q8[] = {
@@ -803,14 +804,15 @@ static ggml_kleidiai_kernels gemm_gemv_kernels_q8[] = {
803804
/* .op_type = */ GGML_TYPE_F32,
804805
},
805806
#endif
807+
{ /* Sentinel */ 0 }
806808
};
807809

808810
ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, const ggml_tensor * tensor) {
809811
ggml_kleidiai_kernels * kernel = nullptr;
810812

811813
if (tensor->op == GGML_OP_MUL_MAT && tensor->src[0] != nullptr && tensor->src[1] != nullptr) {
812814
#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
813-
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels); ++i) {
815+
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels) - 1; ++i) {
814816
if ((cpu_features & gemm_gemv_kernels[i].required_cpu) == gemm_gemv_kernels[i].required_cpu &&
815817
gemm_gemv_kernels[i].lhs_type == tensor->src[1]->type &&
816818
gemm_gemv_kernels[i].rhs_type == tensor->src[0]->type &&
@@ -820,7 +822,7 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, c
820822
}
821823
}
822824
if (!kernel) {
823-
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8); ++i) {
825+
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8) - 1; ++i) {
824826
if ((cpu_features & gemm_gemv_kernels_q8[i].required_cpu) == gemm_gemv_kernels_q8[i].required_cpu &&
825827
gemm_gemv_kernels_q8[i].lhs_type == tensor->src[1]->type &&
826828
gemm_gemv_kernels_q8[i].rhs_type == tensor->src[0]->type &&
@@ -830,6 +832,10 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, c
830832
}
831833
}
832834
}
835+
#else
836+
GGML_UNUSED(gemm_gemv_kernels);
837+
GGML_UNUSED(gemm_gemv_kernels_q8);
838+
GGML_UNUSED(cpu_features);
833839
#endif
834840
}
835841

@@ -840,12 +846,14 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q4_0(cpu_feature features)
840846
ggml_kleidiai_kernels * kernels = nullptr;
841847

842848
#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
843-
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels); ++i) {
849+
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels) - 1; ++i) {
844850
if ((features & gemm_gemv_kernels[i].required_cpu) == gemm_gemv_kernels[i].required_cpu) {
845851
kernels = &gemm_gemv_kernels[i];
846852
break;
847853
}
848854
}
855+
#else
856+
GGML_UNUSED(features);
849857
#endif
850858

851859
return kernels;
@@ -855,12 +863,14 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q8_0(cpu_feature features)
855863
ggml_kleidiai_kernels * kernels = nullptr;
856864

857865
#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
858-
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8); ++i) {
866+
for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8) - 1; ++i) {
859867
if ((features & gemm_gemv_kernels_q8[i].required_cpu) == gemm_gemv_kernels_q8[i].required_cpu) {
860868
kernels = &gemm_gemv_kernels_q8[i];
861869
break;
862870
}
863871
}
872+
#else
873+
GGML_UNUSED(features);
864874
#endif
865875

866876
return kernels;

0 commit comments

Comments
 (0)