nv50: use larger arrays to silence warnings and fix buffer overflows
authorBrian Paul <brianp@vmware.com>
Tue, 31 Jan 2012 14:01:53 +0000 (07:01 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 1 Feb 2012 14:19:54 +0000 (07:19 -0700)
The warnings were:
nv50_pc_regalloc.c: In function ‘pass_generate_phi_movs’:
nv50_pc_regalloc.c:423:41: warning: array subscript is above array bounds
codegen/nv50_ir_peephole.cpp: In member function ‘bool nv50_ir::MemoryOpt::replaceStFromSt(nv50_ir::Instruction*, nv50_ir::MemoryOpt::Record*)’:
codegen/nv50_ir_peephole.cpp:1475:18: warning: array subscript is above array bounds
codegen/nv50_ir_peephole.cpp:1475:18: warning: array subscript is above array bounds
codegen/nv50_ir_peephole.cpp:1475:18: warning: array subscript is above array bounds
codegen/nv50_ir_peephole.cpp:1475:18: warning: array subscript is above array bounds

And add some assertions to catch this sooner in debug builds.

src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp
src/gallium/drivers/nv50/nv50_pc.h

index fc025d8767e9c40996f661fc64a33b9b89040432..fb4041f0b88769c89990288bc1077e1959feb5ed 100644 (file)
@@ -1463,7 +1463,7 @@ MemoryOpt::replaceStFromSt(Instruction *restrict st, Record *rec)
    st->takeExtraSources(0, extra);
 
    if (offR < offS) {
-      Value *vals[4];
+      Value *vals[10];
       int s, n;
       int k = 0;
       // get non-replaced sources of ri
index 45804d3a913518539ed8affc26d7a109ae2d93a9..9abefa2f2aaa793bd7a682971c544aec35b00a73 100644 (file)
@@ -234,7 +234,7 @@ struct nv_instruction {
    int serial;
    struct nv_value *def[4];
    struct nv_value *flags_def;
-   struct nv_ref *src[5];
+   struct nv_ref *src[6];
    struct nv_ref *flags_src;
    struct nv_basic_block *bb;
    struct nv_basic_block *target; /* target block of control flow insn */