aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/avr/avr.cc40
-rw-r--r--gcc/testsuite/gcc.dg/Warray-bounds-33.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr56228.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr86124.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr94291.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr82059.c3
6 files changed, 34 insertions, 22 deletions
diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc
index ccf9b05..9bebd67 100644
--- a/gcc/config/avr/avr.cc
+++ b/gcc/config/avr/avr.cc
@@ -234,6 +234,7 @@ bool avr_has_rodata_p = false;
insn condition for shift insn splitters. */
int n_avr_fuse_add_executed = 0;
+static location_t avr_insn_location = UNKNOWN_LOCATION;
/* Transform UP into lowercase and write the result to LO.
@@ -2712,12 +2713,17 @@ avr_print_operand (FILE *file, rtx x, int code)
fatal_insn ("bad address, not a constant:", addr);
/* Assembler template with m-code is data - not progmem section */
if (text_segment_operand (addr, VOIDmode))
- if (warning (0, "accessing data memory with"
- " program memory address"))
- {
- output_addr_const (stderr, addr);
- fprintf(stderr,"\n");
- }
+ {
+ location_t loc = avr_insn_location != UNKNOWN_LOCATION
+ ? avr_insn_location
+ : input_location;
+ if (warning_at (loc, 0, "accessing data memory with"
+ " program memory address"))
+ {
+ output_addr_const (stderr, addr);
+ fprintf (stderr,"\n");
+ }
+ }
output_addr_const (file, addr);
}
else if (code == 'o')
@@ -2760,12 +2766,17 @@ avr_print_operand (FILE *file, rtx x, int code)
{
/* Constant progmem address - like used in jmp or call */
if (text_segment_operand (x, VOIDmode) == 0)
- if (warning (0, "accessing program memory"
- " with data memory address"))
- {
- output_addr_const (stderr, x);
- fprintf (stderr, "\n");
- }
+ {
+ location_t loc = avr_insn_location != UNKNOWN_LOCATION
+ ? avr_insn_location
+ : input_location;
+ if (warning_at (loc, 0, "accessing program memory"
+ " with data memory address"))
+ {
+ output_addr_const (stderr, x);
+ fprintf (stderr, "\n");
+ }
+ }
/* Use normal symbol for direct address no linker trampoline needed */
output_addr_const (file, x);
}
@@ -2954,6 +2965,8 @@ void
avr_final_prescan_insn (rtx_insn *insn, rtx * /*operands*/,
int /*num_operands*/)
{
+ avr_insn_location = LOCATION_LOCUS (INSN_LOCATION (insn));
+
if (avr_log.rtx_costs)
{
rtx set = single_set (insn);
@@ -2982,6 +2995,9 @@ avr_final_prescan_insn (rtx_insn *insn, rtx * /*operands*/,
static void
avr_asm_final_postscan_insn (FILE *stream, rtx_insn *insn, rtx *, int)
{
+ if (!next_real_insn (insn))
+ avr_insn_location = UNKNOWN_LOCATION;
+
if (cfun->machine->gasisr.yes
&& !next_real_insn (insn))
{
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-33.c b/gcc/testsuite/gcc.dg/Warray-bounds-33.c
index 13efabe..5f06471 100644
--- a/gcc/testsuite/gcc.dg/Warray-bounds-33.c
+++ b/gcc/testsuite/gcc.dg/Warray-bounds-33.c
@@ -2,7 +2,6 @@
an object of incomplete type
{ dg-do compile }
{ dg-options "-O2 -Wall" } */
-/* { dg-skip-if "acessing data memory with program memory address" { "avr-*-*" } } */
struct S
{
@@ -30,7 +29,7 @@ void test_incomplete_enum (void)
void test_func (void)
{
struct S *b = (struct S*)&f;
- if (b->s)
+ if (b->s) /* { dg-warning "accessing data memory with program memory address.*" "" { target avr-*-* } } */
f ();
}
diff --git a/gcc/testsuite/gcc.dg/pr56228.c b/gcc/testsuite/gcc.dg/pr56228.c
index 6e2b4b1..79699a2 100644
--- a/gcc/testsuite/gcc.dg/pr56228.c
+++ b/gcc/testsuite/gcc.dg/pr56228.c
@@ -1,7 +1,6 @@
/* PR target/56228 */
/* { dg-do assemble } */
/* { dg-options "-O2" } */
-/* { dg-skip-if "accessing program memory with data memory address" { "avr-*-*" } } */
short a[14] = { 1, 2 };
short b[15] = { 3, 4 };
@@ -11,7 +10,7 @@ foo ()
{
void (*fna) (void) = (void (*) (void)) a;
void (*fnb) (void) = (void (*) (void)) b;
- fna ();
+ fna (); /* { dg-warning "accessing program memory with data memory address.*" "" { target avr-*-* } } */
fnb ();
return a[1] == b[1];
}
diff --git a/gcc/testsuite/gcc.dg/pr86124.c b/gcc/testsuite/gcc.dg/pr86124.c
index c8a66ff..ebcaed7 100644
--- a/gcc/testsuite/gcc.dg/pr86124.c
+++ b/gcc/testsuite/gcc.dg/pr86124.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O -fipa-pta" } */
-/* { dg-skip-if "acessing data memory with program memory address" { "avr-*-*" } } */
extern void a (void);
@@ -8,5 +7,5 @@ void b (void)
{
void *c;
c = a;
- *(char *)c = 1;
+ *(char *)c = 1; /* { dg-warning "accessing data memory with program memory address.*" "" { target avr-*-* } } */
}
diff --git a/gcc/testsuite/gcc.dg/pr94291.c b/gcc/testsuite/gcc.dg/pr94291.c
index 7d9331b..400524c 100644
--- a/gcc/testsuite/gcc.dg/pr94291.c
+++ b/gcc/testsuite/gcc.dg/pr94291.c
@@ -1,7 +1,6 @@
/* PR rtl-optimization/94291 */
/* { dg-do compile } */
/* { dg-options "-Og" } */
-/* { dg-skip-if "accessing data memory with program memory address" { "avr-*-*" } } */
unsigned a;
@@ -10,6 +9,7 @@ foo (void)
{
unsigned x
= (__builtin_sub_overflow ((long long) a, 0, &x)
- ? 1 : (__INTPTR_TYPE__) __builtin_memmove (&x, foo, 1));
+ ? 1 : (__INTPTR_TYPE__) __builtin_memmove (&x, foo, 1)); /* { dg-warning "accessing data memory with program memory address.*" "" { target avr-*-* } } */
+
return a;
}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr82059.c b/gcc/testsuite/gcc.dg/tree-ssa/pr82059.c
index 6421101..ffa643f 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr82059.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr82059.c
@@ -1,7 +1,6 @@
/* PR tree-optimization/82059 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-isolate-paths" } */
-/* { dg-skip-if "accessing data memory with program memory address" { avr-*-* } } */
struct a
{
@@ -19,5 +18,5 @@ h ()
if (!i)
d ();
i->c = &f;
- i->b = *(char *) h;
+ i->b = *(char *) h; /* { dg-warning "accessing data memory with program memory address.*" "" { target avr-*-* } } */
}