From: SourceForge.net <no...@so...> - 2010-12-22 07:10:46
|
Bugs item #3141559, was opened at 2010-12-21 23:10 Message generated for change (Tracker Item Submitted) made by hawk777 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3141559&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Christopher Head (hawk777) Assigned to: Nobody/Anonymous (nobody) Summary: enum unequal comparison promotion to int Initial Comment: When I compile the attached source file, I use the following command and get the corresponding output: $ sdcc --std-sdcc99 -mpic16 -p18f65j50 --fomit-frame-pointer --obanksel=1 --optimize-cmp --optimize-df --use-non-free -c test.c test.c:16: warning 185: comparison of 'signed char' with 'unsigned char' requires promotion to int Looking at the attached assembly source file, it's quite obvious that it is indeed doing the promotion, allocating unnecessary local variables, and so on. Changing the comparison from != to == makes the message go away and generates much, MUCH smaller code (what one would expect, a single-byte comparison). Interestingly, changing the comparison from != MY_A to != MY_B *also* fixes the bug, suggesting that it's only when comparing against zero that the erroneous promotion occurs (reasonable, since comparisons to zero could probably often be optimized at the machine code level). I have filed this in the None category, because I don't know whether it's a C front-end bug or a pic16 target bug. Similar bugs appear to be filed, but none seem to directly address this issue AFAICT. $ sdcc --version SDCC : pic16/pic14 3.0.0 #6037 (Nov 8 2010) (Linux) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3141559&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-16 08:23:59
|
Bugs item #3141559, was opened at 2010-12-22 08:10 Message generated for change (Comment added) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3141559&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: Icode generator >Group: fixed >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: Christopher Head (hawk777) >Assigned to: Maarten Brock (maartenbrock) Summary: enum unequal comparison promotion to int Initial Comment: When I compile the attached source file, I use the following command and get the corresponding output: $ sdcc --std-sdcc99 -mpic16 -p18f65j50 --fomit-frame-pointer --obanksel=1 --optimize-cmp --optimize-df --use-non-free -c test.c test.c:16: warning 185: comparison of 'signed char' with 'unsigned char' requires promotion to int Looking at the attached assembly source file, it's quite obvious that it is indeed doing the promotion, allocating unnecessary local variables, and so on. Changing the comparison from != to == makes the message go away and generates much, MUCH smaller code (what one would expect, a single-byte comparison). Interestingly, changing the comparison from != MY_A to != MY_B *also* fixes the bug, suggesting that it's only when comparing against zero that the erroneous promotion occurs (reasonable, since comparisons to zero could probably often be optimized at the machine code level). I have filed this in the None category, because I don't know whether it's a C front-end bug or a pic16 target bug. Similar bugs appear to be filed, but none seem to directly address this issue AFAICT. $ sdcc --version SDCC : pic16/pic14 3.0.0 #6037 (Nov 8 2010) (Linux) ---------------------------------------------------------------------- >Comment By: Maarten Brock (maartenbrock) Date: 2011-09-16 10:23 Message: This seems to have been fixed in the mean time. Probably in SDCC 3.0.2 #6515 which was a fix for bug 3117721. https://sourceforge.net/tracker/?func=detail&aid=3117721&group_id=599&atid=100599 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3141559&group_id=599 |