This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[testsuite, AVR]: Add some progmem test cases
- From: Georg-Johann Lay <avr at gjlay dot de>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Anatoly Sokolov <aesok at post dot ru>, Denis Chertykov <chertykov at gmail dot com>, Eric Weddington <eric dot weddington at atmel dot com>
- Date: Thu, 30 Jun 2011 19:38:45 +0200
- Subject: [testsuite, AVR]: Add some progmem test cases
Some runtime and checks for error/warning for C/C++.
Is
./testsuite/gcc.target/avr/
realm of avr port maintainers?
Johann
testsuite/
* gcc.target/avr/avr.exp: Run over cpp files, too.
* gcc.target/avr/torture/avr-torture.exp: Ditto.
* 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.
* gcc.target/avr/torture/progmem.h: New file.
* gcc.target/avr/torture/exit-abort.h: New file.
Index: gcc.target/avr/avr.exp
===================================================================
--- gcc.target/avr/avr.exp (revision 175628)
+++ gcc.target/avr/avr.exp (working copy)
@@ -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.
Index: gcc.target/avr/torture/exit-abort.h
===================================================================
--- gcc.target/avr/torture/exit-abort.h (revision 0)
+++ gcc.target/avr/torture/exit-abort.h (revision 0)
@@ -0,0 +1,8 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+ extern void exit (int);
+ extern void abort (void);
+#ifdef __cplusplus
+}
+#endif
Index: gcc.target/avr/torture/avr-torture.exp
===================================================================
--- gcc.target/avr/torture/avr-torture.exp (revision 175628)
+++ gcc.target/avr/torture/avr-torture.exp (working copy)
@@ -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
Index: gcc.target/avr/torture/progmem-1.c
===================================================================
--- gcc.target/avr/torture/progmem-1.c (revision 0)
+++ gcc.target/avr/torture/progmem-1.c (revision 0)
@@ -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;
+}
Index: gcc.target/avr/torture/progmem-1.cpp
===================================================================
--- gcc.target/avr/torture/progmem-1.cpp (revision 0)
+++ gcc.target/avr/torture/progmem-1.cpp (revision 0)
@@ -0,0 +1,2 @@
+/* { dg-do run } */
+#include "progmem-1.c"
Index: gcc.target/avr/torture/progmem.h
===================================================================
--- gcc.target/avr/torture/progmem.h (revision 0)
+++ gcc.target/avr/torture/progmem.h (revision 0)
@@ -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; }))
Index: gcc.target/avr/progmem-warning-1.c
===================================================================
--- gcc.target/avr/progmem-warning-1.c (revision 0)
+++ gcc.target/avr/progmem-warning-1.c (revision 0)
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wuninitialized" } */
+
+#include "torture/progmem.h"
+
+const char c PROGMEM; /* { dg-warning "uninitialized variable 'c' put into program memory area" } */
Index: gcc.target/avr/progmem-error-1.c
===================================================================
--- gcc.target/avr/progmem-error-1.c (revision 0)
+++ gcc.target/avr/progmem-error-1.c (revision 0)
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+
+#include "torture/progmem.h"
+
+char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */
Index: gcc.target/avr/progmem-error-1.cpp
===================================================================
--- gcc.target/avr/progmem-error-1.cpp (revision 0)
+++ gcc.target/avr/progmem-error-1.cpp (revision 0)
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+
+#include "torture/progmem.h"
+
+char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */