← 목록
기타 2026-07-31 3KB 읽기 3분

STORE/LOAD 인자순서 결함 수리 (T169)

개요

T137이 "범위 밖 잔여 이슈"로 남긴 결함: hanseonc_high의 저장/불러/메모리쓰기/메모리읽기 빌트인 호출 시 인자 push 순서와 crownyc.c STORE(op7)/LOAD(op8)의 pop 순서가 어긋나 저장(주소, 값) 호출이 값↔주소가 뒤바뀐 채 저장되는 조용한 결함.

재현

저장(100, 777)
출력값(문자열변환(불러(100)))
수정 전: 0 (기대 777) — /private/tmp/store_load_fix/repro.한선

판정

  • 사용처 전수 grep: 저장(/불러(/메모리읽기(/메모리쓰기( VM빌트인 직접호출
(문서CDF.한선·문서지식.한선 등)는 전부 "저장(주소, 값)" 순서를 쓰고 있음 확인.
  • 메모리쓰기(mem,주소,값) 3항 사용처는 하드웨어.한선/삼진메모리.한선 등 사용자정의
함수(find_func 우선)라 VM opcode7과 무관 — 영향 없음.
  • RPN(hanseonc_rpn.c)의 저장/불러 키워드는 postfix라 사용자가 직접 push 순서를
정하므로 이 결함과 무관(수정 불필요).
  • 결론: "저장(주소, 값)" 순서를 정본으로 고정, SWAP 삽입으로 STORE pop순서(addr=top)에
맞춘다.

수정

  • /Users/ef/CrownyOS/crownyc/hanseonc_high.c — "저장"/"메모리쓰기"/"불러"/"메모리읽기"
특수처리 블록 추가(설정/부분과 같은 패턴). 저장 계열은 addr,val 파싱 후 SWAP+STORE. crownyc.c(VM)·hanseonc_rpn.c는 수정하지 않음.

검증

  1. /private/tmp/store_load_fix/에서 /tmp 빌드: repro 통과(0→777).
  2. 회귀: libs/문자열.한선, libs/JSON.한선, libs/날짜.한선 — 신구 컴파일러 toau
byte-identical (저장/불러 미사용 파일 전부 무변화 확인).
  1. RPN 대표 3본은 hanseonc_rpn.c 무변경이라 재검증 불필요.

라이브 교체

  • /Users/ef/CrownyOS/crownyc/hanseonc_high 교체 완료.
  • 백업: /private/tmp/store_load_fix/백업/hanseonc_high.live_backup_20260731_T169 (세션
종료 시 /tmp 휘발 가능 — 영구 보관 필요시 이관 요망)
  • pkg/hanseonc_high(npm 패키지 산출물)는 CLAUDE.md 원칙상 자체 릴리즈 시점에만
동기화 — 이번엔 미교체(범위 밖).
  • crownyc(VM)는 무변경이라 재빌드/교체 불필요.

잔여 이슈

  • 문서CDF.한선 등 실사용 파일 자체의 라이브 재컴파일/재배포는 이번 티켓 범위 밖
(컴파일러 수정만). 해당 서비스가 재기동 시 자동으로 새 hanseonc_high로 컴파일되므로 다음 배포에서 자연히 반영됨 — 단, 이미 컴파일된 .toau가 라이브에 떠 있다면 그 자체는 구버전 결함이 굳어있는 채로 실행 중일 수 있음(재컴파일 필요 여부 점검 권고).