変数サイズミスで、終わらないforループをワーニングにしたい

初めまして、よろしくお願いします。

e2 studio で CCRL 1.09 を使用させていただいています。

変数サイズミスで終わらないforループをワーニングにする方法を教えて頂けないでしょうか。

・コンパイラの最適化はDebug優先です。

・forの後のコード(ret = 10;)を生成していないので、コンパイラは無限ループを認識していると思います。

・ワーニングが出ないと、全てのforループの変数長と、終了条件を目視チェックすることになるので、非常に厳しいです。

例:(1000までカウントする変数 count を、8ビットで定義してしまった)

void main(void) {
 unsigned char count;
 unsigned char ret;
 ret = 0;
 for(count = 0; count < 1000; count++){
  ret++;
 }
 ret = 10;
}

アセンブラ出力:

#CC-RL Compiler RL78 Assembler Source
#@  CC-RL Version : V1.09.00 [11 Nov 2019]
#@  Commmand :
#@   -cpu=S2
#@   -c
#@   -dev=C:\Renesas\e2_studio\DebugComp\\RL78\RL78\Common\DR5F1026A.DVF
#@   -I C:\Program Files (x86)\Renesas\RL78\1_9_0\inc
#@   -I C:\test\char_test\generate
#@   -character_set=utf8
#@   -lang=c
#@   -g
#@   -asm_path=src/
#@   -pass_source
#@   -Onothing
#@   -o src/char_test.obj
#@   ../src/char_test.c
#@  compiled at Tue Apr 21 08:55:06 2020

 .PUBLIC _main

 .SECTION .textf,TEXTF
_main:
 .STACK _main = 6
 ;***        1 :
 ;***        2 : void main(void)
 .LINE "C:/test/char_test/src/char_test.c", 2
 push hl
 ;***        3 : {
 ;***        4 :  unsigned char count;
 ;***        5 :  unsigned char ret;
 ;***        6 :  ret = 0;
 .LINE "C:/test/char_test/src/char_test.c", 6
 mov [sp+0x00], #0x00
.BB@LABEL@1_1: ; entry.split
 ;***        7 :  for(count = 0; count < 1000; count++){
 .LINE "C:/test/char_test/src/char_test.c", 7
 mov [sp+0x01], #0x00
 br $.BB@LABEL@1_3
.BB@LABEL@1_2: ; bb
 ;***        8 :   ret++;
 .LINE "C:/test/char_test/src/char_test.c", 8
 mov a, [sp+0x00]
 inc a
 mov [sp+0x00], a
 mov a, [sp+0x01]
 inc a
 mov [sp+0x01], a
.BB@LABEL@1_3: ; bb6
 .LINE "C:/test/char_test/src/char_test.c", 7
 br $.BB@LABEL@1_2
 ;***        9 :  }
 ;***       10 :  ret = 10;
 ;***       11 : }

 

よろしくお願いいたします。

Parents
  • 補足です。

    int main() にして、return ret; にしても、コードは生成されていませんでした。
    (行番号は先ほどとは異なります)
    ;*** 6 : ret = 10;
    ;*** 7 : return ret;
    ;*** 8 : }

    よろしくお願いします。
Reply
  • 補足です。

    int main() にして、return ret; にしても、コードは生成されていませんでした。
    (行番号は先ほどとは異なります)
    ;*** 6 : ret = 10;
    ;*** 7 : return ret;
    ;*** 8 : }

    よろしくお願いします。
Children
No Data