Commit a648cfe8 by Georg-Johann Lay Committed by Georg-Johann Lay

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
parent db297e20
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
......
......@@ -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.
......
#ifdef __cplusplus
extern "C" {
#endif
extern void exit (int);
extern void abort (void);
#ifdef __cplusplus
}
#endif
/* { dg-do compile } */
#include "progmem.h"
char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */
/* { dg-do compile } */
#include "progmem.h"
char str[] PROGMEM = "Hallo"; /* { dg-error "must be const" } */
/* 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" } */
#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; }))
......@@ -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
......
/* { 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;
}
/* { dg-do run } */
#include "progmem-1.c"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment