summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-460010.c
blob: 97693bd1aee3878dcfc27b3f29a3962faef47b0e (plain) (blame)
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
33
34
35
36
37
38
/* bug 460010
 */
#include <testfwk.h>

#ifdef __SDCC
#if defined(__SDCC_pic16) || defined(__SDCC_pdk14) || defined(__SDCC_pdk15)
#define ADDRESS 0x0070
#else
#define ADDRESS 0xa000
#endif  /* SDCC_pic16 */
#endif  /* SDCC */

void 
func (unsigned char a)
{
  UNUSED (a);
}

void
testBadPromotion (void)
{
#ifdef __SDCC
  unsigned char c = *((unsigned __xdata char*)(ADDRESS));
#else
  unsigned char loc_c;
  unsigned char c = *(unsigned char*)&loc_c;
#endif 

  func (c);

  c += '0';     /* is evaluated as an 8-bit expr */ 

  func (c); 

  c += 'A'-'0'; /* is a 16-bit expr ??? */ 

  func (c);
}