【広告】楽天市場から大感謝祭を開催中26日1時59分まで

Cコンパイラ掲示板


3301
今日1 昨日0

ホームページへ戻る

名前
Eメール
題名
内容
URL
削除キー 項目の保存

[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

とするとビルドできます。




Number
Pass

ThinkPadを買おう!
レンタカーの回送ドライバー
【広告】楽天市場から大感謝祭を開催中26日1時59分まで
無料で掲示板を作ろう   情報の外部送信について
このページを通報する 管理人へ連絡
SYSTEM BY せっかく掲示板