diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2011-07-04 12:48:04 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2011-07-04 12:48:04 +0000 |
commit | a648cfe8b3e10819f1a88ccc6912ca1529454024 (patch) | |
tree | 2cbe3891c85132880ac7daf51ebffe5758df74af /gcc | |
parent | db297e20845c258a8c02eeab220027d9717a3cd3 (diff) | |
download | gcc-a648cfe8b3e10819f1a88ccc6912ca1529454024.zip gcc-a648cfe8b3e10819f1a88ccc6912ca1529454024.tar.gz gcc-a648cfe8b3e10819f1a88ccc6912ca1529454024.tar.bz2 |
re PR target/34734 ([avr] attribute((progmem)) not handled properly in C++)
PR target/34734
PR target/44643
* gcc.target/avr/avr.exp: Run over cpp files, too.
* gcc.target/avr/torture/avr-torture.exp: Ditto.
* gcc.target/avr/progmem.h: New file.
* gcc.target/avr/exit-abort.h: New file.
* gcc.target/avr/progmem-error-1.c: New file.
* gcc.target/avr/progmem-error-1.cpp: New file.
* gcc.target/avr/progmem-warning-1.c: New file.
* gcc.target/avr/torture/progmem-1.c: New file.
* gcc.target/avr/torture/progmem-1.cpp: New file.
From-SVN: r175811
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/avr.exp | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/exit-abort.h | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/progmem-error-1.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/progmem-error-1.cpp | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/progmem-warning-1.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/progmem.h | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/torture/avr-torture.exp | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/torture/progmem-1.c | 30 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp | 2 |
10 files changed, 87 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 70806e1..21bab4d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2011-07-04 Georg-Johann Lay <avr@gjlay.de> + + PR target/34734 + PR target/44643 + * gcc.target/avr/avr.exp: Run over cpp files, too. + * gcc.target/avr/torture/avr-torture.exp: Ditto. + * gcc.target/avr/progmem.h: New file. + * gcc.target/avr/exit-abort.h: New file. + * gcc.target/avr/progmem-error-1.c: New file. + * gcc.target/avr/progmem-error-1.cpp: New file. + * gcc.target/avr/progmem-warning-1.c: New file. + * gcc.target/avr/torture/progmem-1.c: New file. + * gcc.target/avr/torture/progmem-1.cpp: New file. + 2011-07-04 Richard Guenther <rguenther@suse.de> PR tree-optimization/49615 diff --git a/gcc/testsuite/gcc.target/avr/avr.exp b/gcc/testsuite/gcc.target/avr/avr.exp index 90aeed4..a552a96 100644 --- a/gcc/testsuite/gcc.target/avr/avr.exp +++ b/gcc/testsuite/gcc.target/avr/avr.exp @@ -34,7 +34,7 @@ if ![info exists DEFAULT_CFLAGS] then { dg-init
# Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cCS\],cpp}]] \
"" $DEFAULT_CFLAGS
# All done.
diff --git a/gcc/testsuite/gcc.target/avr/exit-abort.h b/gcc/testsuite/gcc.target/avr/exit-abort.h new file mode 100644 index 0000000..cf7df20 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/exit-abort.h @@ -0,0 +1,8 @@ +#ifdef __cplusplus +extern "C" { +#endif + extern void exit (int); + extern void abort (void); +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/avr/progmem-error-1.c b/gcc/testsuite/gcc.target/avr/progmem-error-1.c new file mode 100644 index 0000000..cf53cc8 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/progmem-error-1.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ + +#include "progmem.h" + +char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */ diff --git a/gcc/testsuite/gcc.target/avr/progmem-error-1.cpp b/gcc/testsuite/gcc.target/avr/progmem-error-1.cpp new file mode 100644 index 0000000..cf53cc8 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/progmem-error-1.cpp @@ -0,0 +1,5 @@ +/* { dg-do compile } */ + +#include "progmem.h" + +char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */ diff --git a/gcc/testsuite/gcc.target/avr/progmem-warning-1.c b/gcc/testsuite/gcc.target/avr/progmem-warning-1.c new file mode 100644 index 0000000..67af05f --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/progmem-warning-1.c @@ -0,0 +1,7 @@ +/* PR target/34734 */ +/* { dg-do compile } */ +/* { dg-options "-Wuninitialized" } */ + +#include "progmem.h" + +const char c PROGMEM; /* { dg-warning "uninitialized variable 'c' put into program memory area" } */ diff --git a/gcc/testsuite/gcc.target/avr/progmem.h b/gcc/testsuite/gcc.target/avr/progmem.h new file mode 100644 index 0000000..d5e86c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/progmem.h @@ -0,0 +1,14 @@ +#define PROGMEM __attribute__((progmem)) + +#define PSTR(s) \ + (__extension__({ \ + static const char __c[] PROGMEM = (s); \ + &__c[0];})) + +#define pgm_read_char(addr) \ + (__extension__({ \ + unsigned int __addr16 = (unsigned int)(addr); \ + char __result; \ + __asm__ ("lpm %0, %a1" \ + : "=r" (__result) : "z" (__addr16)); \ + __result; })) diff --git a/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp b/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp index 355b3ad..e2f83d6 100644 --- a/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp +++ b/gcc/testsuite/gcc.target/avr/torture/avr-torture.exp @@ -52,7 +52,7 @@ set-torture-options $AVR_TORTURE_OPTIONS # Main loop.
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] $DEFAULT_CFLAGS
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cS\],cpp}]] $DEFAULT_CFLAGS
# Finalize use of torture lists.
torture-finish
diff --git a/gcc/testsuite/gcc.target/avr/torture/progmem-1.c b/gcc/testsuite/gcc.target/avr/torture/progmem-1.c new file mode 100644 index 0000000..790c676 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/progmem-1.c @@ -0,0 +1,30 @@ +/* { dg-do run } */ + +#include "../exit-abort.h" +#include "../progmem.h" + +const char strA[] PROGMEM = "@A"; +const char strc PROGMEM = 'c'; + +unsigned int volatile s = 2; + +int main() +{ + char c; + + c = pgm_read_char (&strA[s-1]); + if (c != 'A') + abort(); + + c = pgm_read_char (&PSTR ("@@B")[s]); + if (c != 'B') + abort(); + + c = pgm_read_char (&strc); + if (c != 'c') + abort(); + + exit (0); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp b/gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp new file mode 100644 index 0000000..a1df9e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp @@ -0,0 +1,2 @@ +/* { dg-do run } */ +#include "progmem-1.c" |