| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||
|---|---|---|---|---|---|---|---|---|---|
| 0000582 | mercury | Bug | public | 2026-03-03 11:53 | 2026-03-04 20:09 | ||||
| Reporter | wangp | ||||||||
| Assigned To | zs | ||||||||
| Priority | normal | Severity | minor | Reproducibility | always | ||||
| Status | resolved | Resolution | fixed | ||||||
| Product Version | |||||||||
| Target Version | Fixed in Version | ||||||||
| Summary | 0000582: generate int switches for other integer types | ||||||||
| Description | The compiler ought to be able to generate all the different switch types on all integer types, not just `int'. We noticed this deficiency on a fact table of the form: :- pred action_table(int16::in, int16::in, uint16::out) is semidet. action_table(0i16, 0i16, 1661u16). action_table(0i16, 1i16, 1661u16). action_table(0i16, 2i16, 1661u16). action_table(0i16, 3i16, 1661u16). action_table(0i16, 4i16, 1661u16). action_table(0i16, 5i16, 1661u16). action_table(0i16, 6i16, 1661u16). action_table(0i16, 7i16, 1661u16). action_table(0i16, 8i16, 1661u16). action_table(0i16, 9i16, 1661u16). ... In the end, we replaced the input arguments with `int's (which was fine, but shouldn't be necessary). | ||||||||
| Tags | No tags attached. | ||||||||
| Attached Files |
| ||||||||
Notes |
|
|
zs (developer) 2026-03-03 17:50 Last edited: 2026-03-03 17:51 |
I just cut-and-pasted that code into a module, and the compiler found the switch just fine. When you say "fact table", do you mean (1) simply a predicate defined by a bunch of facts in the .m file, as implied by your example, or (2) a predicate defined by a :- pragma fact_table? Fact table pragmas predate the addition of sized integer types to the language by *many* years, and when Julien did that addition, we agreed that there is no point in adding them to fact_table.m, because the compiler by then could handle much larger predicate definitions than before. If you mean (2), then why did you choose the pragma route in this instance? |
|
wangp (developer) 2026-03-03 18:17 |
Just a predicate. (I shouldn't have said "fact table", I forgot the pragma exists.) switch_gen.generate_int_switch will only generate lookup and dense switches for 'int', not other integer types. Similarly for the high-level code generator. |
|
zs (developer) 2026-03-04 20:09 |
Fix committed 2026 mar 4. |
Issue History |
|||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-03-03 11:53 | wangp | New Issue | |
| 2026-03-03 17:50 | zs | Note Added: 0001241 | |
| 2026-03-03 17:51 | zs | Note Edited: 0001241 | View Revisions |
| 2026-03-03 18:17 | wangp | Note Added: 0001242 | |
| 2026-03-03 18:21 | zs | Assigned To | => zs |
| 2026-03-03 18:21 | zs | Status | new => assigned |
| 2026-03-04 20:09 | zs | Status | assigned => resolved |
| 2026-03-04 20:09 | zs | Resolution | open => fixed |
| 2026-03-04 20:09 | zs | Note Added: 0001243 | |


