1 /* bug-905492.c 2 3 the standard guarantees left-to-right evaluation, 4 if the first operand is unequal 0 (resp. 0), the second isn't evaluated. 5 */ 6 7 #include <testfwk.h> 8 9 char a; 10 11 char inc_a(char c)12inc_a(char c) 13 { 14 a += 1; 15 return c; 16 } 17 18 void testLeftRightAndOr(void)19testLeftRightAndOr(void) 20 { 21 volatile char c; 22 23 a = 0; c = inc_a(0) || inc_a(0); ASSERT(a == 2); 24 a = 0; c = inc_a(0) || inc_a(1); ASSERT(a == 2); 25 a = 0; c = inc_a(1) || inc_a(0); ASSERT(a == 1); 26 a = 0; c = inc_a(1) || inc_a(1); ASSERT(a == 1); 27 28 a = 0; c = inc_a(0) && inc_a(0); ASSERT(a == 1); 29 a = 0; c = inc_a(0) && inc_a(1); ASSERT(a == 1); 30 a = 0; c = inc_a(1) && inc_a(0); ASSERT(a == 2); 31 a = 0; c = inc_a(1) && inc_a(1); ASSERT(a == 2); 32 } 33