Skip to content

Commit

Permalink
backends/cpp: Don't hide local variables named "tmp" in calls to intfuns
Browse files Browse the repository at this point in the history
Part of GH-16.

Reported-by: @mbty
  • Loading branch information
cpitclaudel committed Aug 24, 2021
1 parent da174b5 commit 4bd7ed2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
22 changes: 11 additions & 11 deletions ocaml/backends/resources/cuttlesim.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1399,9 +1399,9 @@ namespace cuttlesim {
#define FAIL_UNLESS(can_fire) \
{ if (!(can_fire)) { FAIL(); } }
#define READ(read_fn, reg, source) \
({ decltype(source.reg) tmp; \
({ decltype(source.reg) _tmp; \
FAIL_UNLESS(read_fn(&tmp, source.reg, log.rwset.reg, Log.rwset.reg)); \
tmp; })
_tmp; })
#define WRITE(write_fn, reg, val) \
FAIL_UNLESS(write_fn(log.state.reg, (val), log.rwset.reg))
#define READ0(reg) \
Expand All @@ -1415,9 +1415,9 @@ namespace cuttlesim {
#define FN_RETURN(val) \
{ (*__fn_ret) = val; return true; }
#define CALL_FN(fname, ...) \
({ PASTE_EXPANDED_3(ti_fn, RULE_NAME, fname) tmp; \
FAIL_UNLESS(PASTE_EXPANDED_3(fn, RULE_NAME, fname)(tmp,##__VA_ARGS__)); \
tmp; })
({ PASTE_EXPANDED_3(ti_fn, RULE_NAME, fname) _tmp; \
FAIL_UNLESS(PASTE_EXPANDED_3(fn, RULE_NAME, fname)(_tmp,##__VA_ARGS__)); \
_tmp; })
#define COMMIT() \
{ PASTE_EXPANDED_2(commit, RULE_NAME)(); return true; }

Expand All @@ -1440,9 +1440,9 @@ namespace cuttlesim {
{ if (!(can_fire)) { FAIL_DL(); } }
#define READ_DL(read_fn, reg, source) \
({ dlog.push(reg_name_t::reg); \
decltype(source.reg) tmp; \
FAIL_UNLESS_DL(read_fn(&tmp, source.reg, log.rwset.reg, Log.rwset.reg)); \
tmp; })
decltype(source.reg) _tmp; \
FAIL_UNLESS_DL(read_fn(&_tmp, source.reg, log.rwset.reg, Log.rwset.reg)); \
_tmp; })
#define WRITE_DL(write_fn, reg) \
{ dlog.push(reg_name_t::reg); \
FAIL_UNLESS_DL(write_fn(log.state.reg, (val), log.rwset.reg)) }
Expand All @@ -1467,9 +1467,9 @@ namespace cuttlesim {
offsetof(struct rwset_t, reg), sizeof(rwset_t::reg), })
#define READ_DOL(read_fn, reg, source) \
({ PUSH_DOL(reg); \
decltype(source.reg) tmp; \
FAIL_UNLESS_DOL(read_fn(&tmp, source.reg, log.rwset.reg, Log.rwset.reg)); \
tmp; })
decltype(source.reg) _tmp; \
FAIL_UNLESS_DOL(read_fn(&_tmp, source.reg, log.rwset.reg, Log.rwset.reg)); \
_tmp; })
#define WRITE_DOL(write_fn, reg, val) \
{ PUSH_DOL(reg); \
FAIL_UNLESS_DOL(write_fn(log.state.reg, (val), log.rwset.reg)) }
Expand Down
15 changes: 15 additions & 0 deletions tests/tmp_var.lv
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
;;; Unit test for “tmp” variable

(defun sum ((v1 (bits 16)) (v2 (bits 16))) (bits 16)
(+ v1 v2))

(module tmp_var
(register r 16'b0)

(rule init
(let ((tmp 16'b0000111100001111)
(_tmp 16'b0000111100001111)
(tmp (sum tmp _tmp)))
(displn tmp)))

(scheduler s (sequence init)))

0 comments on commit 4bd7ed2

Please sign in to comment.