Cコンパイラ掲示板
3301
今日1 昨日0
[24] 題名:%zu はまだ無理2 名前:長谷川啓 MAIL 投稿日: 2018/08/28(火) 15:19
size_t を printf_chk.dll に伝えるという方針はおそらく間違いだったと思うので、別の方針を考えます。
理由:size_t のように typedef された型名に対して型を表すクラスを作成しようとしていましたが, これだと型の等価性, compatibility の判定に、現状の実装だと、問題があったため。
[23] 題名:%zu は今は無理 名前:長谷川啓 MAIL 投稿日: 2018/08/27(月) 23:17
hcc1.exe -> printf_chk.dll と伝わる情報の中で演算の結果が size_t ではなく unsigned int となっているからです。
typedef unsigned int size_t;
...
printf("%d %d\n", sizeof expr, strlen(s));
t0 := &"%d %d\n"
...
param t0
param c1 # sizeof expr ランタイム評価(定数), 型は unsigned int
param t2 # strlen 戻り値, 型は unsigned int
call printf
%zu に対応するのならば c1 や t2 の型を unsigned int とするのではなく、size_t として printf_chk.dll に渡す必要があるでしょう。現状では unsigned int としてしまっているので %zu とかに対応するのが無理なんです。
[22] 題名:%zu 名前:匿名希望 投稿日: 2018/08/27(月) 23:06
printf チェッカーの Quiita の投稿で
https://qiita.com/keihasegawa18/items/4dfba8392e0e7a6f1407#comment-ddecb321c4eef0503882
「%zu を実装するのが簡単ではない」
とあるけど、これってどういう状況ですか?
[21] 題名:C インタープリター 名前:長谷川啓 MAIL 投稿日: 2018/08/26(日) 15:49
二か月前のことで事後になりますが C のインタープリターみたいなものも作成しました。ホームページの
トップ -> 3 番地コードシミュレータ
でたどれます。
[20] 題名:printf チェッカー 名前:長谷川啓 MAIL 投稿日: 2018/08/25(土) 17:56
printf の書式文字列と引数の妥当性を検査するバックエンドを作成しました。
もしよろしければダウンロード、ビルドしてお使いください。
[19] 題名:cygwin のどのパッケージが少なくとも必要か 名前:長谷川啓 MAIL 投稿日: 2018/05/07(月) 20:05
hcc1 をビルドするのに cygwin の以下のパッケージをインストールしてください。
perl
g++
flex
bison
tcsh
make
[18] 題名:コンパイラのソースを zip ファイルから tar.bz2 形式に変更 名前:長谷川啓 MAIL 投稿日: 2018/05/05(土) 09:39
% bunzip2 -c hcc1_src.tar.bz2 | tar xf -
とすると 20_hcc1/src というフォルダができるので、そこにある hcc1.vcproj を Visual Studio 2017 で開けばビルドできます。
[17] 題名:動作確認 名前:長谷川啓 MAIL 投稿日: 2018/02/22(木) 21:30
動作確認は、例えば、以下のようにして行います。
> cat sample.txt
float f(int a, int b)
{
return (double)a + b;
}
> ./hcc1.exe --no-generator --output-medium --simple-medium sample.txt
f:
t0 := (double)a
t1 := (double)b
t2 := t0 + t1
t3 := (float)t2
return t3
float f(int,int)
int a
int b
double t0
double t1
double t2
float t3
>
Visual Studio 2017 の場合も --no-generator --output-medium --simple-medium sample.txt の引数を指定すればいいです。
[16] 題名:動作確認 名前:長谷川啓 MAIL 投稿日: 2018/02/22(木) 15:19
動作確認は、例えば、以下のようにして行います。
> cat sample.txt
float f(int a, int b)
{
return (double)a + b;
}
> ./hcc1.exe --no-generator --output-medium --simple-medium sample.txt
f:
t0 := (double)a
t1 := (double)b
t2 := t0 + t1
t3 := (float)t2
return t3
float f(int,int)
int a
int b
double t0
double t1
double t2
float t3
>
Visual Studio 2017 の場合も --no-generator --output-medium --simple-medium sample.txt の引数を指定すればいいです。
[15] 題名:Cygwin でビルド 名前:長谷川啓 MAIL 投稿日: 2018/02/22(木) 15:08
Visual Studio 2017 じゃなく Cygwin の g++ でビルドしたい方は src.zip を解凍して、解凍したフォルダで
$ make
とするとビルドできます。