From: SourceForge.net <no...@so...> - 2011-11-30 08:34:22
|
Bugs item #3445888, was opened at 2011-11-30 00:34 Message generated for change (Tracker Item Submitted) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&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: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: ptrdiff_t range non-compliant Initial Comment: C99 standard, 7.18.3p2: — limits of ptrdiff_t PTRDIFF_MIN −65535 PTRDIFF_MAX +65535 sdcc #7090, stdint.h: #define PTRDIFF_MIN (-32767-1) #define PTRDIFF_MAX (32767) IMO, we should make ptrdiff_t the same as int_fast32_t on all targets (at least until we have support for 24-bit integers). Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-11-30 09:15:08
|
Bugs item #3445888, was opened at 2011-11-30 00:34 Message generated for change (Comment added) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&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: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: ptrdiff_t range non-compliant Initial Comment: C99 standard, 7.18.3p2: — limits of ptrdiff_t PTRDIFF_MIN −65535 PTRDIFF_MAX +65535 sdcc #7090, stdint.h: #define PTRDIFF_MIN (-32767-1) #define PTRDIFF_MAX (32767) IMO, we should make ptrdiff_t the same as int_fast32_t on all targets (at least until we have support for 24-bit integers). Philipp ---------------------------------------------------------------------- >Comment By: Maarten Brock (maartenbrock) Date: 2011-11-30 01:15 Message: I do not fully agree. IMO this small deviation is allowed, becuase we are talking about SMALL devices here where it is very unlikely one ever needs this range. Almost all supported targets have 64k address spaces (sole exception: ds390) and must turn to bankswitching to use more. But ptrdiff_t is there to contain the difference between two pointers into the SAME array (see C99 6.5.6.9) and one array cannot span multiple banks. You only need a wider range when your array contains bytes and spans more than 32k. So, I'd be more inclined to turn the mcs51 ptrdiff_t to signed int than all others to signed long. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-11-30 10:20:49
|
Bugs item #3445888, was opened at 2011-11-30 00:34 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&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: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: ptrdiff_t range non-compliant Initial Comment: C99 standard, 7.18.3p2: — limits of ptrdiff_t PTRDIFF_MIN −65535 PTRDIFF_MAX +65535 sdcc #7090, stdint.h: #define PTRDIFF_MIN (-32767-1) #define PTRDIFF_MAX (32767) IMO, we should make ptrdiff_t the same as int_fast32_t on all targets (at least until we have support for 24-bit integers). Philipp ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-11-30 02:20 Message: While the standard allows some things for freestanding implementations that are not allowed to hosted implementations (e.g. not supporting complex types), as far as I can see, ptrdiff_t is not among them: Freestanding implemenations are required to provide stdint.h and the standard requires stdint.h to provide PTRDIFF_MIN and PTRDIFF_MAX with the stated limits. The use of large arrays might be rare, but: 1) Someone might want to use pointer arithmetic on large array, I can see some use-cases for a 48K uint8_t array. 2) ptrdiff_t matters only for pointer subtractions, and these are rare. Even when someone does subtract pointers, AFAIK sdcc will optimize the large ptrdiff_t away if the result is assigned to a smaller integer type. Thus, IMO there is no significant penalty for being standard-compliant. Philipp ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2011-11-30 01:15 Message: I do not fully agree. IMO this small deviation is allowed, becuase we are talking about SMALL devices here where it is very unlikely one ever needs this range. Almost all supported targets have 64k address spaces (sole exception: ds390) and must turn to bankswitching to use more. But ptrdiff_t is there to contain the difference between two pointers into the SAME array (see C99 6.5.6.9) and one array cannot span multiple banks. You only need a wider range when your array contains bytes and spans more than 32k. So, I'd be more inclined to turn the mcs51 ptrdiff_t to signed int than all others to signed long. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-12-02 06:21:39
|
Bugs item #3445888, was opened at 2011-11-30 00:34 Message generated for change (Comment added) made by achdawai You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&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: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: ptrdiff_t range non-compliant Initial Comment: C99 standard, 7.18.3p2: — limits of ptrdiff_t PTRDIFF_MIN −65535 PTRDIFF_MAX +65535 sdcc #7090, stdint.h: #define PTRDIFF_MIN (-32767-1) #define PTRDIFF_MAX (32767) IMO, we should make ptrdiff_t the same as int_fast32_t on all targets (at least until we have support for 24-bit integers). Philipp ---------------------------------------------------------------------- Comment By: achdawai (achdawai) Date: 2011-12-01 22:21 Message: Hi, I don't know if we support them, but some PIC16 CPUs have >64k address spaces, such as the PIC18F47J53 I'm using right now. Regards ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-11-30 02:20 Message: While the standard allows some things for freestanding implementations that are not allowed to hosted implementations (e.g. not supporting complex types), as far as I can see, ptrdiff_t is not among them: Freestanding implemenations are required to provide stdint.h and the standard requires stdint.h to provide PTRDIFF_MIN and PTRDIFF_MAX with the stated limits. The use of large arrays might be rare, but: 1) Someone might want to use pointer arithmetic on large array, I can see some use-cases for a 48K uint8_t array. 2) ptrdiff_t matters only for pointer subtractions, and these are rare. Even when someone does subtract pointers, AFAIK sdcc will optimize the large ptrdiff_t away if the result is assigned to a smaller integer type. Thus, IMO there is no significant penalty for being standard-compliant. Philipp ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2011-11-30 01:15 Message: I do not fully agree. IMO this small deviation is allowed, becuase we are talking about SMALL devices here where it is very unlikely one ever needs this range. Almost all supported targets have 64k address spaces (sole exception: ds390) and must turn to bankswitching to use more. But ptrdiff_t is there to contain the difference between two pointers into the SAME array (see C99 6.5.6.9) and one array cannot span multiple banks. You only need a wider range when your array contains bytes and spans more than 32k. So, I'd be more inclined to turn the mcs51 ptrdiff_t to signed int than all others to signed long. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3445888&group_id=599 |