変数サイズミスで、終わらない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 : }

 

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

  • ega258さん
    ほや です。こんにちは。

    e² studioのプロジェクトインポート機能にCC-RLからGCCプロジェクトへの変換(コンバータ)はないので、
    GCCのプロジェクトを新規で作成するしかありません。

    CC-RLのプロジェクトとしてインポートしたものを「Tool chainエディター」で
    toolchainだけGCCに変更しようとしてもまずうまく行かないので御注意。

    文法チェックだけが目的ならリンクまで通す必要はないので難しくないと思います。

  • ほやさん、ega258さん
    komです。こんにちは。

    色々と有難うございます。

    終わらないループが有る事を知りたいだけでしたので、
    gccでコンパイルだけ(リンクとビルドは不要)できるプロジェクトを作成して、
    大きな修正後にソースコード一式をコピペで置き換えて、ビルドしています。

    これで、"#if 未定義シンボル"と"256回以上のループ変数をcharに間違えて終わらない"を
    見つけられるので、私の用途には十分です。


    今後ともよろしくお願いします。
  • > 大きな修正後にソースコード一式をコピペで置き換えて、ビルドしています。

    e² studio上でソースファイルを別のプロジェクトにドラッグ&ドロップし、その際に「コピー」でなく「リンク」を選ぶと、ソースファイルを毎回コピーし直さずに済みます。