diff options
-rw-r--r-- | gcc/config/avr/avr.cc | 40 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Warray-bounds-33.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr56228.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr86124.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr94291.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr82059.c | 3 |
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-*-* } } */ } |