| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000239 | mercury | Bug | public | 2011-11-30 08:44 | 2011-12-05 14:18 | ||||||||
| Reporter | colanderman | ||||||||||||
| Assigned To | |||||||||||||
| Priority | normal | Severity | minor | Reproducibility | always | ||||||||
| Status | new | Resolution | open | ||||||||||
| Product Version | |||||||||||||
| Target Version | Fixed in Version | ||||||||||||
| Summary | 0000239: Aliasing of partially instantiated structures in solutions.* predicates | ||||||||||||
| Description | If a partially instantiated structure is fully instantiated and output from the generator predicate of one of the solutions.* predicates, then each result generated will point at the same physical structure (see attached example). This is because multi/nondet predicates do not deep copy partially instantiated structures when filling them in, and solutions.builtin_aggregate does not deep copy while generating results (except in the case of accurate garbage collection). Since changing the former would result in pervasive ABI changes, I believe that changing solutions.builtin_aggregate to always copy generated results is the correct solution (albeit at a performance hit). | ||||||||||||
| Tags | No tags attached. | ||||||||||||
| Attached Files | 
 | ||||||||||||
|  Notes | |
| colanderman (reporter) 2011-11-30 08:49 | Attached is a proof-of-concept patch against a 11.07 beta (not CVS, sorry) which fixes the bug in asm_fast.gc, hlc.gc, and java.  I believe it also fixes the bug in C# grades, but I cannot test this.  I am not sure that the bug exists in Erlang grades. The attached patch is suboptimal in that it will unnecessarily copy the aggregation result as well. I suppose the changes in the patch should instead create a new predicate similar to partial_deep_copy, but perhaps there is a cleaner method. | 
| mark (administrator) 2011-12-05 14:18 | The "bug" here is just that the current implementation does not support partially instantiated data structures, so if you want to use them you should expect to need some workarounds.  I don't want to pay the cost of unnecessary copying to partly support a feature that won't be fully supported anyway. In this case a workaround is to perform the necessary copying yourself in the closure that is passed to solutions.*. | 
|  Issue History | |||
| Date Modified | Username | Field | Change | 
|---|---|---|---|
| 2011-11-30 08:44 | colanderman | New Issue | |
| 2011-11-30 08:44 | colanderman | File Added: agg_bug.m | |
| 2011-11-30 08:45 | colanderman | File Added: solutions_copy.patch | |
| 2011-11-30 08:49 | colanderman | Note Added: 0000419 | |
| 2011-12-05 14:18 | mark | Note Added: 0000431 | |

 
	

