AVR: PR target/112952: Fix attribute "address", "io" and "io_low"
so they work with all combinations of -f[no-]data-sections -f[no-]common. The patch also improves some diagnostics and adds additional checks, for example these attributes must only be applied to variables in static storage. gcc/ PR target/112952 * config/avr/avr.cc (avr_handle_addr_attribute): Also print valid range when diagnosing attribute "io" and "io_low" are out of range. (avr_eval_addr_attrib): Don't ICE on empty address at that place. (avr_insert_attributes): Reject if attribute "address", "io" or "io_low" in contexts other than static storage. (avr_asm_output_aligned_decl_common): Move output of decls with attribute "address", "io", and "io_low" to... (avr_output_addr_attrib): ...this new function. (avr_asm_asm_output_aligned_bss): Remove output for decls with attribute "address", "io", and "io_low". (avr_encode_section_info): Rectify handling of decls with attribute "address", "io", and "io_low". gcc/testsuite/ PR target/112952 * gcc.target/avr/attribute-io.h: New file. * gcc.target/avr/pr112952-0.c: New test. * gcc.target/avr/pr112952-1.c: New test. * gcc.target/avr/pr112952-2.c: New test. * gcc.target/avr/pr112952-3.c: New test.
Showing
- gcc/config/avr/avr.cc 121 additions, 51 deletionsgcc/config/avr/avr.cc
- gcc/testsuite/gcc.target/avr/attribute-io.h 74 additions, 0 deletionsgcc/testsuite/gcc.target/avr/attribute-io.h
- gcc/testsuite/gcc.target/avr/pr112952-0.c 16 additions, 0 deletionsgcc/testsuite/gcc.target/avr/pr112952-0.c
- gcc/testsuite/gcc.target/avr/pr112952-1.c 16 additions, 0 deletionsgcc/testsuite/gcc.target/avr/pr112952-1.c
- gcc/testsuite/gcc.target/avr/pr112952-2.c 16 additions, 0 deletionsgcc/testsuite/gcc.target/avr/pr112952-2.c
- gcc/testsuite/gcc.target/avr/pr112952-3.c 16 additions, 0 deletionsgcc/testsuite/gcc.target/avr/pr112952-3.c
Loading