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