+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
dg-init\r
\r
# Main loop.\r
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \\r
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cCS\],cpp}]] \\r
"" $DEFAULT_CFLAGS\r
\r
# All done.\r
--- /dev/null
+#ifdef __cplusplus
+extern "C" {
+#endif
+ extern void exit (int);
+ extern void abort (void);
+#ifdef __cplusplus
+}
+#endif
--- /dev/null
+/* { dg-do compile } */
+
+#include "progmem.h"
+
+char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */
--- /dev/null
+/* { dg-do compile } */
+
+#include "progmem.h"
+
+char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */
--- /dev/null
+/* 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" } */
--- /dev/null
+#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; }))
\r
\r
# Main loop.\r
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] $DEFAULT_CFLAGS\r
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cS\],cpp}]] $DEFAULT_CFLAGS\r
\r
# Finalize use of torture lists.\r
torture-finish\r
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { dg-do run } */
+#include "progmem-1.c"