blob: 1d98a6b57b7b281f5157d541fceeb72045ca42cb [file] [log] [blame]
/* { dg-do compile } */
/* { dg-require-effective-target avr_tiny } */
/* { dg-options "-mabsdata" } */
typedef struct
{
char a, b, c;
} abc_t;
extern char varA;
extern char varB;
extern const char varC __attribute__((progmem));
extern int arrayA[];
extern int arrayB[];
extern char arrayC[] __attribute__((address(0x80)));
extern char arrayD[] __attribute__((address(0xc0)));
extern abc_t abc;
char get_1 (void)
{
return varA;
}
int get_2 (void)
{
return arrayA[3];
}
char get_3 (void)
{
return abc.a + abc.b + abc.c;
}
char get_4 (void)
{
return varC;
}
void put_1 (char b)
{
varB = b;
}
void put_2 (int b)
{
arrayB[3] = b;
}
void put_3 (void)
{
abc.a = abc.b = abc.c = 0;
}
void put_4 (void)
{
arrayC[0] = arrayC[1] = arrayC[2] = 0;
}
void put_5 (void)
{
arrayD[0] = 0;
}
/* { dg-final { scan-assembler "lds r\[0-9\]+,varA" } } */
/* { dg-final { scan-assembler "lds r\[0-9\]+,arrayA\\+6" } } */
/* { dg-final { scan-assembler "lds r\[0-9\]+,arrayA\\+6\\+1" } } */
/* { dg-final { scan-assembler "lds r\[0-9\]+,abc" } } */
/* { dg-final { scan-assembler "lds r\[0-9\]+,abc\\+1" } } */
/* { dg-final { scan-assembler "lds r\[0-9\]+,abc\\+2" } } */
/* { dg-final { scan-assembler "sts varB," } } */
/* { dg-final { scan-assembler "sts arrayB\\+6," } } */
/* { dg-final { scan-assembler "sts arrayB\\+6\\+1," } } */
/* { dg-final { scan-assembler "sts arrayC," } } */
/* { dg-final { scan-assembler "sts arrayC\\+1," } } */
/* { dg-final { scan-assembler "sts arrayC\\+2," } } */
/* { dg-final { scan-assembler "sts abc," } } */
/* { dg-final { scan-assembler "sts abc\\+1," } } */
/* { dg-final { scan-assembler "sts abc\\+2," } } */
/* { dg-final { scan-assembler-not "lds r\[0-9\]+,varC" } } */
/* { dg-final { scan-assembler-not "sts arrayD," } } */