From: SourceForge.net <no...@so...> - 2011-09-19 12:21:34
|
Bugs item #2932819, was opened at 2010-01-15 12:52 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=2932819&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: C-Front End Group: None >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: Philipp Klaus Krause (spth) >Assigned to: Philipp Klaus Krause (spth) Summary: _Bool data type doesn't work Initial Comment: _Bool is a C99 keyword. AFAIK it should behave identical to sdcc's __bit. However in sdcc there's just the line "#define _Bool __bit" in stdbool.h. However the C standard requires the _Bool data type even when stdbool.h is not included. Only support for bool depends on including stdbool.h I suggest replacing the sdcc-specific keyword __bit by the C keyword _Bool. I use sdcc 2.9.6 #5630. Philipp ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-19 14:21 Message: Fixed in svn revision #6860, by implementing bool for pic14 and pic16, which were the last ports to have no bool at all. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-02 10:00 Message: The problem in bug1723128.c is not a regression: The regression test is wrapped in #ifdef __bool_true_false_are_defined, which previously was not defined for hc08. Looking at the generated code all places where bool is used look ok; it seems the bug is in the part of the code that does not use bool. I'll thus disable bug1723128.c for hc08 again and file a separate bug report. Philipp ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2011-09-02 08:36 Message: Philipp, Revision #6799 introduced a problem in regression test bug1723128.c for hc08. It does not print correctly and takes 10x more ticks. But is not recognized as a failure. Maarten ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-01 15:37 Message: This bug report now (with the implementation of _Bool for hc08 in revision #6799) only affects the pic14 and pic16 ports. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2010-08-08 12:11 Message: The second set of regression tests has been added and the increment/decrement problem fixed. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2010-08-07 00:35 Message: I created a new bugreport for the increment/decrement problem: #3040914. Philipp ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2010-08-05 22:50 Message: When I add the second set to the bool.c regression test the last two fail for z80. They pass with __bit on ds390 and mcs51. E = 0; ASSERT(!E); // sets E to 0 E = 1; ASSERT(E); // sets E to 1 E = 4; ASSERT(E); // sets E to 1 E = 0.5; ASSERT(E); // sets E to 1 E++; ASSERT(E); // sets E to 1 E--; ASSERT(!E); // sets E to 1-E Maarten ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2010-01-25 15:45 Message: I added a test in revision #5655 (support/regression/bool.c). It includes the tests from the first part of Jan's post. Feel free to extend it. Philipp ---------------------------------------------------------------------- Comment By: Borut Ražem (borutr) Date: 2010-01-25 15:27 Message: Philipp, can you please add also a _Bool regression test? I think that examples Jan pointed out would be OK: ----8<---- Now, two technicalities, both illustrated by a snippet of code from Derek Jones's book (page 489, "verse" 474, chapter 6.2.5): 1. (*) - conforming arithmetics of _Bool is not trivial, regardless of if it is implemented as a bit or a byte: extern _Bool E; void f(void) { if (((E ? 1 : 0) != (!(!E))) || ((E += 2) != 1) || ((--E, --E, E) != E)) printf("This is not a conforming implementation\n"); } 2. _Bool in struct can *not* be directly replaced for bitfield of size 1: void g(void) { _Bool Q; struct { unsigned int u_bit :1; } u; #define U (u.ubit) Q = 0; U = 0; // sets both to 0 Q = 1; U = 1; // sets both to 1 Q = 4; U = 4; // sets Q to 1, U to 0 Q = 0.5; U = 0.5; // sets Q to 1, U to 0 Q++; U++; // sets Q to 1; sets U to 1-U Q--; U--; // sets Q to 1-Q; sets U to 1-U } ---->8---- The second example is also applicable for bitfields regression test. Borut ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2010-01-25 10:25 Message: This bug report no longer applies to the z80 and gbz80 ports. It can be closed once all ports have true _Bool support. ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2010-01-17 19:46 Message: Originally I took the lazy and compatible route when I implemented stdbool.h but I have no problem with this to do it "right". Maarten ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=2932819&group_id=599 |