---
generated_at: 2026-02-19 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：Compiler-CodeGen 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **C-53**: LookupGeneratedValue の正常系テスト - 実装詳細の確認が必要
  2. **C-56**: ForceSetGeneratedValue の動作確認 - 実装詳細の確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/Compiler/CodeGen/EraseClosures.fsi` - クロージャ消去モジュールのインターフェース定義
- E-02: `src/Compiler/CodeGen/EraseClosures.fs` - クロージャ消去モジュールの実装（789行）
- E-03: `src/Compiler/CodeGen/EraseUnions.fsi` - 判別ユニオン消去モジュールのインターフェース定義
- E-04: `src/Compiler/CodeGen/EraseUnions.fs` - 判別ユニオン消去モジュールの実装
- E-05: `src/Compiler/CodeGen/IlxGen.fsi` - ILXコード生成器のインターフェース定義
- E-06: `src/Compiler/CodeGen/IlxGen.fs` - ILXコード生成器の実装（約10000行以上）
- E-07: `src/Compiler/CodeGen/IlxGenSupport.fsi` - ILX生成サポートのインターフェース定義
- E-08: `src/Compiler/CodeGen/IlxGenSupport.fs` - ILX生成サポートの実装（482行）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | newIlxPubCloEnvでcenv環境が作成される | E-01, E-02 (line 142-151) | ○ |
| C-02 | tref_Funcが10要素の配列として初期化される | E-02 (line 145) | ○ |
| C-03 | mkILFuncTyでFSharpFunc型が生成される | E-01, E-02 (line 155-156) | ○ |
| C-04 | mkILTyFuncTyでFSharpTypeFunc型が返却される | E-01, E-02 (line 153) | ○ |
| C-05 | mkTyOfLambdasがLambdas_returnで戻り値型を返却 | E-01, E-02 (line 178-182) | ○ |
| C-06 | mkTyOfLambdasがLambdas_lambdaでネスト関数型を返却 | E-02 (line 181) | ○ |
| C-07 | mkTyOfLambdasがLambdas_forallでTypeFunc型を返却 | E-02 (line 182) | ○ |
| C-08 | mkCallFuncでApps_app連鎖のInvoke呼び出し生成 | E-01, E-02 (line 226-337) | ○ |
| C-09 | mkCallFuncでApps_tyappのSpecialize呼び出し生成 | E-02 (line 277-310) | ○ |
| C-10 | mkCallFuncで終端appsの空リスト返却 | E-02 (line 334) | ○ |
| C-11 | convIlxClosureDefで型抽象クロージャ変換 | E-01, E-02 (line 415-595) | ○ |
| C-12 | convIlxClosureDefで項抽象クロージャ変換 | E-02 (line 597-728) | ○ |
| C-13 | convIlxClosureDefで環境クロージャ変換 | E-02 (line 730-778) | ○ |
| C-14 | stripSupportedAbstractionで5つのterm引数分解 | E-02 (line 90-101) | ○ |
| C-15 | stripSupportedAbstractionで空入力の分解 | E-02 (line 101) | ○ |
| C-16 | mkNewDataでnullary caseのAI_ldnull生成 | E-03, E-04 (line 395-431) | ○ |
| C-17 | mkNewDataで定数フィールドのI_ldsfld生成 | E-04 (line 361-363) | ○ |
| C-18 | mkNewDataで新規インスタンスのI_newobj生成 | E-04 (line 364-386) | ○ |
| C-19 | mkIsDataでRuntimeTypes判別の型チェック生成 | E-03, E-04 (line 433-452) | ○ |
| C-20 | mkIsDataでIntegerTagのタグ比較生成 | E-04 (line 447) | ○ |
| C-21 | mkIsDataでSingleCaseの定数1生成 | E-04 (line 445) | ○ |
| C-22 | mkIsDataでTailOrNullのTail比較生成 | E-04 (line 448-451) | ○ |
| C-23 | mkLdDataでavoidHelpers時のフィールドロード | E-03, E-04 (line 304-314) | ○ |
| C-24 | mkLdDataでヘルパー使用時のgetter呼び出し | E-04 (line 311-314) | ○ |
| C-25 | mkLdDataAddrでavoidHelpers時のアドレスロード | E-03, E-04 (line 316-324) | ○ |
| C-26 | mkLdDataAddrでavoidHelpers=false時の例外 | E-04 (line 324) | ○ |
| C-27 | mkStDataでフィールドストア命令生成 | E-03, E-04 (line 389-393) | ○ |
| C-28 | mkBrIsDataでsense=trueのブランチ生成 | E-03, E-04 (line 489-510) | ○ |
| C-29 | mkBrIsDataでsense=falseのブランチ生成 | E-04 (line 490-491) | ○ |
| C-30 | GetILTypeForAlternativeでIL型取得 | E-03, E-04 (line 246-247) | ○ |
| C-31 | mkClassUnionDefで判別ユニオン型定義生成 | E-03 (line 36-47) | ○ |
| C-32 | ICodeGen.CodeLabelでコードラベル取得 | E-03, E-04 (line 454-455) | ○ |
| C-33 | ICodeGen.GenerateDelayMarkで遅延マーク生成 | E-03, E-04 (line 456) | ○ |
| C-34 | ICodeGen.EmitInstrで単一命令出力 | E-03, E-04 (line 458) | ○ |
| C-35 | ICodeGen.EmitInstrsで複数命令出力 | E-03, E-04 (line 459) | ○ |
| C-36 | emitCastDataでcanfail=trueの検証コード出力 | E-03, E-04 (line 585-616) | ○ |
| C-37 | emitCastDataでcanfail=falseのキャスト出力 | E-04 (line 597-598, 610-611) | ○ |
| C-38 | emitLdDataTagでヘルパー使用時のGetTag呼び出し | E-03, E-04 (line 512-518) | ○ |
| C-39 | emitLdDataTagでRuntimeTypesの型判別コード | E-04 (line 535-580) | ○ |
| C-40 | emitDataSwitchでRuntimeTypes用switch出力 | E-03, E-04 (line 618-645) | ○ |
| C-41 | emitDataSwitchでIntegerTag用I_switch出力 | E-04 (line 647-667) | ○ |
| C-42 | emitDataSwitchで空casesのAI_pop出力 | E-04 (line 649) | ○ |
| C-43 | UnionReprDecisions.DiscriminationTechniqueでTailOrNull | E-04 (line 75-90) | ○ |
| C-44 | UnionReprDecisions.DiscriminationTechniqueでSingleCase | E-04 (line 81-82) | ○ |
| C-45 | UnionReprDecisions.DiscriminationTechniqueでIntegerTag | E-04 (line 89-90) | ○ |
| C-46 | UnionReprDecisions.DiscriminationTechniqueでRuntimeTypes | E-04 (line 83-88) | ○ |
| C-47 | RepresentAlternativeAsNullでnullPermitted=true判定 | E-04 (line 93-100) | ○ |
| C-48 | RepresentAlternativeAsNullでnullPermitted=false判定 | E-04 (line 96) | ○ |
| C-49 | IlxAssemblyGenerator.newで初期化 | E-05 (line 96) | ○ |
| C-50 | IlxAssemblyGenerator.GenerateCodeでIL生成 | E-05 (line 107) | ○ |
| C-51 | IlxAssemblyGenerator.AddExternalCcusで外部参照登録 | E-05 (line 99) | ○ |
| C-52 | IlxAssemblyGenerator.AddIncrementalLocalAssemblyFragmentでフラグメント追加 | E-05 (line 101-104) | ○ |
| C-53 | IlxAssemblyGenerator.LookupGeneratedValueで値ルックアップ | E-05 (line 116) | △ |
| C-54 | IlxAssemblyGenerator.LookupGeneratedValueで未登録値None | E-05 (line 116) | ○ |
| C-55 | IlxAssemblyGenerator.ClearGeneratedValueで値クリア | E-05 (line 110) | ○ |
| C-56 | IlxAssemblyGenerator.ForceSetGeneratedValueで強制設定 | E-05 (line 113) | △ |
| C-57 | ReportStatisticsで統計出力 | E-05, E-06 (line 195) | ○ |
| C-58 | IsFSharpValCompiledAsMethodでメソッド判定true | E-05, E-06 (line 121) | ○ |
| C-59 | IsFSharpValCompiledAsMethodでフィールド判定false | E-06 (line 121) | ○ |
| C-60 | TypeReprEnv.Itemで登録済みTyparインデックス取得 | E-06 (line 539-545) | ○ |
| C-61 | TypeReprEnv.Itemで未登録Typarエラー | E-06 (line 542-545) | ○ |
| C-62 | TypeReprEnv.AddOneで非消去Typar追加 | E-06 (line 549-553) | ○ |
| C-63 | TypeReprEnv.AddOneで消去Typar無視 | E-06 (line 552-553) | ○ |
| C-64 | cenv.optionsでオプション取得 | E-06 (line 332-335) | ○ |
| C-65 | cenv.optionsで未設定時例外 | E-06 (line 334) | ○ |
| C-66 | mkLdfldMethodDefで非静的メソッド生成 | E-07, E-08 (line 14-34) | ○ |
| C-67 | mkLdfldMethodDefで静的メソッド生成 | E-08 (line 23-27) | ○ |
| C-68 | GetDynamicDependencyAttributeで属性生成 | E-07, E-08 (line 293-313) | ○ |
| C-69 | GenReadOnlyModReqIfNecessaryでinref型modreq追加 | E-07, E-08 (line 475-481) | ○ |
| C-70 | GenReadOnlyModReqIfNecessaryで非inref型そのまま | E-08 (line 480-481) | ○ |
| C-71 | GenAdditionalAttributesForTyで追加属性生成 | E-07, E-08 (line 469-472) | ○ |
| C-72 | GetReadOnlyAttributeで属性取得 | E-07, E-08 (line 255-256) | ○ |
| C-73 | GetIsUnmanagedAttributeで属性取得 | E-07, E-08 (line 258-259) | ○ |
| C-74 | GetNullableAttributeで単一info属性生成 | E-07, E-08 (line 353-368) | ○ |
| C-75 | GetNullableAttributeで複数info属性生成 | E-08 (line 368) | ○ |
| C-76 | GetNullableContextAttributeで属性生成 | E-07, E-08 (line 319-329) | ○ |
| C-77 | GetNotNullWhenTrueAttributeで属性生成 | E-07, E-08 (line 331-351) | ○ |
| C-78 | GetNullnessFromTTypeで参照型nullness取得 | E-08 (line 390-449) | ○ |
| C-79 | GetNullnessFromTTypeで値型空リスト | E-08 (line 396-398) | ○ |
| C-80 | GetNullnessFromTTypeでジェネリック値型0先頭 | E-08 (line 404-406) | ○ |
| C-81 | GenNullnessIfNecessaryでNullable属性生成 | E-08 (line 451-467) | ○ |
| C-82 | GenNullnessIfNecessaryでNone返却 | E-08 (line 466-467) | ○ |
| C-83 | GenNullnessIfNecessaryでWithoutNull最適化 | E-08 (line 462-463) | ○ |
| C-84 | GenTypeAuxでTType_app変換 | E-06 (line 684-692) | ○ |
| C-85 | GenTypeAuxでTType_fun変換 | E-06 (line 696-697) | ○ |
| C-86 | GenTypeAuxでTType_tuple変換 | E-06 (line 694) | ○ |
| C-87 | GenTypeAuxでTType_var変換 | E-06 (line 722) | ○ |
| C-88 | GenTypeAuxでTType_measure変換 | E-06 (line 724) | ○ |
| C-89 | GenUnionSpecでユニオン仕様生成 | E-06 (line 801-804) | ○ |
| C-90 | GenUnionRefでユニオン参照キャッシュ | E-06 (line 750-784) | ○ |
| C-91 | ComputeUnionHasHelpersでunit型NoHelpers | E-06 (line 787-788) | ○ |
| C-92 | ComputeUnionHasHelpersでlist型SpecialHelpers | E-06 (line 789-790) | ○ |
| C-93 | ComputeUnionHasHelpersでoption型SpecialHelpers | E-06 (line 791-792) | ○ |
| C-94 | GenReturnTypeでNone時void生成 | E-06 (line 827-829) | ○ |
| C-95 | GenReturnTypeでSome時IL型生成 | E-06 (line 830-834) | ○ |
| C-96 | ComputeMemberAccessでhidden=trueのAssembly | E-06 (line 500-507) | ○ |
| C-97 | ComputeMemberAccessでhidden=falseのPublic | E-06 (line 506-507) | ○ |
| C-98 | ComputeTypeAccessでNested判定 | E-06 (line 509-517) | ○ |
| C-99 | CheckCodeDoesSomethingで有効命令true | E-06 (line 92-100) | ○ |
| C-100 | CheckCodeDoesSomethingでnop/retのみfalse | E-06 (line 95-99) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-53, C-56: IlxAssemblyGeneratorの実行時値操作メソッド（LookupGeneratedValue, ForceSetGeneratedValue）は、インターフェース定義(.fsi)では公開されているが、実装の詳細な動作（ExecutionContextとの連携、エラーハンドリング）については追加調査が必要
  - 候補：E-06の該当実装部分（約10000行以上のファイル内）/ 既存テストコード / 使用例

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全体的にソースコードとインターフェース定義から根拠を確認済み
- 1: 中リスク - C-53, C-56: 実行時の動的値操作に関するテストケースは実装詳細の確認が推奨される
- 0: 低リスク - F#コンパイラのCodeGenモジュールは成熟したコードベースであり、API安定性が高い

## 6) レビュアーチェックリスト（最小）
- [ ] EraseClosures関連テストケース（C-01〜C-15）の網羅性を確認
- [ ] EraseUnions関連テストケース（C-16〜C-48）の判別技術別カバレッジを確認
- [ ] IlxGen関連テストケース（C-49〜C-100）の型変換ロジック網羅性を確認
- [ ] IlxGenSupport関連テストケース（C-66〜C-83）のNullable属性生成ロジックを確認
- [ ] C-53, C-56の実装詳細を確認し、テストケースの妥当性を検証
- [ ] 境界値テスト（空入力、単一ケースなど）の十分性を確認
