Mercury Bugs - mercury | |||||
View Issue Details | |||||
ID | Project | Category | View Status | Date Submitted | Last Update |
0000426 | mercury | Bug | public | 2016-10-21 15:47 | 2018-08-09 22:05 |
Reporter | juliensf | ||||
---|---|---|---|---|---|
Assigned To | |||||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | OS | OS Version | |||
Product Version | |||||
Target Version | Fixed in Version | ||||
Summary | 0000426: Tabling broken on 32-bit Cygwin | ||||
Description | Pretty much every tabling test case and the compiler itself (the CTGC code uses pragma memo) abort with an error about having detected infinite recursion. In the tabling transformation, det procedures are transformed as follows: p(A, B) :- TO = <table pointer for p/2>, impure table_lookup_insert(T0, A, T), impure table_loop_setup(T, Status), ( Status = loop_active, error("detected infinite recursion in ...") ; Status = loop_inactive, ... ) On Cygwin the variable Status gets set to a rubbish value at some points. It actually ends up matching the default case of the C switch we generate for the above Mercury switch but then falls through to the infinite recursion case. (Enabling assertions would cause it to abort.) I haven't tracked down why this is occurring although it may have something to do with the fact that on Windows sizeof(int) == sizeof(long). (Is the tabling code making assumption that sizeof(long) > sizeof(int) somewhere?) | ||||
Tags | No tags attached. | ||||
Relationships | |||||
Attached Files | fast_loose.txt.gz (338,918) 2018-08-09 22:05 https://bugs.mercurylang.org/file_download.php?file_id=285&type=bug |
Notes | |||||
|
|||||
|
|
Issue History | |||||
Date Modified | Username | Field | Change | ||
---|---|---|---|---|---|
2016-10-21 15:47 | juliensf | New Issue | |||
2018-08-09 22:05 | wangp | File Added: fast_loose.txt.gz | |||
2018-08-09 22:05 | wangp | Note Added: 0001006 |