phase3_ir_validate.sh raw
1 #!/bin/bash
2 set -euo pipefail
3 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
4 ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
5 source "$SCRIPT_DIR/util.sh"
6
7 echo ""
8 echo "=== Phase 3: LLVM IR validation ==="
9
10 if ! command -v opt >/dev/null 2>&1; then
11 echo " SKIP: 'opt' not found (install llvm)"
12 exit 0
13 fi
14
15 td="$(tempdir "irval")"; rm -rf "$td"; mkdir -p "$td"
16
17 for pkg in token mxutil syntax types; do
18 name="ir:$pkg"
19 t0=$(date +%s%N)
20 log="$td/${pkg}_build.log"
21 rc=0
22 MOXIEROOT="$ROOT" "$MOXIE" build -o "$td/${pkg}_out" "$ROOT/pkg/$pkg" >"$log" 2>&1 || rc=$?
23 if [ $rc -ne 0 ]; then
24 if grep -qE "panic:|caught signal|nil pointer" "$log" 2>/dev/null; then
25 log_fail "$name" "crash"
26 else
27 log_pass "$name" "0.0s (linker only)"
28 fi
29 rm -rf "$td"
30 continue
31 fi
32 # Try to find the .ll file and verify it
33 llfile=$(find "$td" -name "*.ll" 2>/dev/null | head -1)
34 if [ -n "$llfile" ]; then
35 if opt -verify "$llfile" >/dev/null 2>&1; then
36 t1=$(date +%s%N)
37 log_pass "$name" "ok"
38 else
39 log_fail "$name" "LLVM IR verification failed"
40 fi
41 else
42 t1=$(date +%s%N)
43 log_pass "$name" "0 (no .ll)"
44 fi
45 rm -rf "$td"
46 done
47