Avr-gcc Bugs
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Bugs
PR | Description | Note |
---|---|---|
114208 | DSE deletes a store that's not dead | rtl |
87376 | Miscompilation with __memx and long long addition | → 86635 |
86635 | Wrong code with __memx and __gtsf2 | |
81073 | Link failure as C++ misses to instanciate some objects | C++ |
80573 | ICE: in assign_temp, at function.c:961 | |
78707 | ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c) | |
78497 | -save-temps adds -Wimplicit-fallthrough warnings | |
68384 | LTO error for global register variables | |
67352 | incorrect warning with -Waddr-space-convert and struct in __flash | |
65657 | read from __memx tramples function argument | → 86635 |
64331 | avr.c:reg_unused_after uses outdated reg_dead notes | |
63630 | ICE: Spill fail | |
62084 | ICE: in convert_debug_memory_address (__memx, -g) | middle-end → 52472 |
57597 | ICE: in get_section, Segmentation fault with -fmerge-all-constants | varasm |
57482 | --help=optimizers reports a wrong list | |
56479 | ICE: can't allocate two 4-byte variables to "a" for inline asm | |
56442 | postreload uses clobbered register | |
56183 | Problems with register allocation | meta-bug |
56164 | ICE: spill fail with __flash keyword | |
54330 | Wrong optimization for code from fixed-bit.c | |
53615 | Buffer overflow in the compiler? | |
52663 | ICE: in purge_dead_edges, at cfgrtl.c:2462 | |
52305 | ICE: in avr_print_operand: unknown mode (const_double) | asm |
50925 | ICE: spill failure in newlib build | |
50739 | nameless error with -fmerge-all-constants | |
49775 | ICE: in based_loc_descr | dwarf-2 |
42204 | update_eliminables should be called in reload after something changes | |
36571 | Default untyped return for AVR is byte register. |
Binutils / avr-libc
PR | Description | Note |
---|---|---|
binutils | ||
16005 | Linker crash with --relax | |
13812 | .trampolines location in linker script cause "internal error: out of range error" | |
12494 | Relaxation leads to wrong code optimization | |
binutils fixed | ||
31704 | Support avr-objdump -P avr-deviceinfo | 2.43 |
31687 | Output of avr-objdump -P mem-usage missing .rodata | 2.43 |
31321 | Remove PROVIDE from definition of symbol __flmap_init_label | 2.43 |
31124 | Support new Emulations for Devices with FLMAP | 2.42 rodata-in-flash |
31177 | Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text | 2.42 |
21621 | Wrong / missing warning "skipping two-word instruction" | 2.29.x |
21849 | Locate .progmemx.* at a higher address | 2.29.x |
21683 | Support __gcc_isr pseudo-instruction | 2.29 |
21583 | Move .jumptables to a higher address | 2.29 |
21569 | Merge avr.sc and avrtiny.sc | 2.29 |
21472 | Add new emulation for ATtiny416 et al. (don't put .rodata in RAM) | 2.29 rodata-in-flash |
21404 | Assertion fail in bfd/elf32-avr.c:2145 | 2.28 |
20849 | Don't put .rodata in RAM on AVR_TINY. | 2.28 rodata-in-flash |
20789 | Fix relaxation of negative DIFF relocs. | 2.26 |
20254 | Relocs at end of section are not processed with .align. | 2.26 |
20221 | Wrong code with .align and linker relaxation. | 2.26 |
15043 | Support -mrmw option for LAC, LAT, LAS and XCH. | 2.25 |
14058 | Internal overflow error on > 128kB flash | 2.23 |
13899 | Wrong relaxation of R_AVR_16_PM with gs() | 2.23 |
13697 | Wrong symbol values with --gc-sections and empty .data | 2.23 |
13503 | Support RELOCs to represent a byte | 2.23 |
13410 | Relocation truncated to fit: R_AVR_13_PCREL against symbol... | 2.23 |
12742 | mingw32 and --enable-lto in Canadian cross build | 2.23 |
12161 | Unconforming ELF file causes SIGSEGV in avr-ld | 2.23, 2.22.x |
avr-libc | ||
57114 | Do not #define abs / labs | →57071 |
57071 | Fix math.h and function names that block 64-bit double | 2.2 |
49567 | Use meta-info from --print-multi-lib and --print-multi-directory | 2.2 |
P-9416 | [patch,AVR_TINY] Avoid constraint "w" in delay_basic.h | Patch |
P-9400 | [patch] Add avrxmega3 multilibs | √ |
P-9187 | [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions. | √ |
P-8729 | [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers. | √ |
38135 | Install stdfix-avrlibc.h | √ |
38125 | Distribute gcrt1.S | |
36571 | stdint.h: INTn_C not standard compliant | |
36454 | string.h: Error for long long in C90 | 1.8.1 |
35407 | Missing multilib versions for tiny-stack targets | √ |
34695 | stdint.h fixed-width int types without __attribute__((mode)) | |
33698 | RJMP/RCALL can cause "relocation truncated to fit: R_AVR_13_PCREL" linker error | √ ? |
Optimierung
PR | Optimization | Note |
---|---|---|
114243 | -fsplit-wide-types bloats code by more than 50% | Regression |
110093 | Move frenzy leading to code bloat. | Regression |
109910 | Prologue/epilogue saves/restores regs that are never changed. | |
88209 | Inefficient array initialization | |
84211 | Perform a post-reload register optimization pass | Patch |
82658 | Right-shifting 8-bit unsigned integers. | C++ |
81625 | v4.7 ... v8 is bloating code by > 25% compared to v3.4 | |
81611 | gcc un-learned loop / post-increment optimization | |
81540 | tree-switch-conversion leads to code bloat | tree-ssa |
81533 | Constructing an object that can be initialized at at load-time | c++ |
80929 | Division with constant no more optimized to mult | middle-end |
65082 | Wasted cycles when using a register based varible | |
56439 | unnecessary spill for global and local register variables | |
55181 | Expensive shift loop instead of bit-testing instruction | |
54378 | Code bloat for long << shifts | |
53049 | expand/TER unappropriate moving unspec volatile | middle-end |
52664 | gcc.dg/tree-ssa/pr31261.c fails | ssa |
52278 | inefficient register allocation for SUBREGs | RA |
49807 | Missed byte (subreg) extraction when storing to volatile mem | |
49491 | Superfluous move because of unnecessary spill for 2-operand insn | RA |
39760 | register allocation costs are not well described on AVR | |
38629 | target-specific parameters for inline heuristics not defined for AVR | |
36884 | ifcvt poor optimization | RTL-optimize, -fno-if-conversion |
36561 | store using long array index not hoisted out of loop | |
30908 | tree cost for types which are > WORD_SIZE | |
27663 | missed-optimization transforming a byte array to unsigned long | patch upstream |
18065 | usual arithmetic conversion not applying correctly | |
11180 | Optimization decrease performance of struct assignment. | |
3507 | appalling optimisation with sub/cmp on multiple targets |
Debug-Info, Build, ...
PR | Debug-Info, Build, Ada, Fortran | Note |
---|---|---|
52641 | Test cases fail for 16-bit int targets | testsuite |
Erweiterungen
PR | Extensions | Note |
---|---|---|
84163 | Allow address space qualifier for compound literals | C |
57390 | Support fixed-point types in C++ | C++ |
Ungültig
PR | Invalid | Note |
---|---|---|
61044 | Computed goto with label differences does not work | → Label differences not suported on AVR: Labels as Values |
57501 | crttn24a.o missing path with -mmcu=attiny24a | → Caused by AVR-LibC #35407 |
52474 | mulhisi3: arithmetics produce completely wrong result | → Caused by patch from Atmel |
38549 | eicall not properly set for > 128K program space | → 50820 |
PR | Won't fix | Note |
14406 | Support .progmem<N>.data sections in the default ld script | → Begründung + Beispiel für ld-Skript Erweiterung |
56254 | Support __builtin_avr_delay_cycles with non-const delays | |
49857 | Put constant switch-tables into flash | (patch) |
43745 | Put VTABLES in Flash | |
38342 | __attribute__((progmem)) not propagated from typedef to data | → avr-libc #33716 |
Fixed
PR | Fixed | Note |
---|---|---|
92606 | Invalid merge of symbols in progmem and data sections (WA: -fno-ipa-icf-variables) | 14.2, 13.3, 12.4 |
86869 | ICE when taking address of array member of __memx struct pointer | 14.1 |
109907 | Code bloat for single bit extractions | 14 |
114100 | Better indirect addressing on reduced Tiny | 14 |
113156 | avr build broken: ICE: 'global_options' are modified in local context | 14 |
112944 | Support .rodata in Flash for Devices with FLMAP | 14 |
112830 | ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302 | 14 |
101188 | Uses content of a clobbered register | 14 |
113927 | [avr-tiny] Sets up a stack-frame even for trivial code | 13.3 |
105523 | Avoid diagnostic "array subscript 0 is outside array bounds of 'volatile uint8_t[0] [-Warray-bounds]" | 13.3 |
53372 | Section attribute ignored with address space | 13.3 |
113824 | ATA5795 in wrong multilib set | 13.3, 12.4 |
112952 | Fix attributes address , io and io_low
|
13.3, 12.4 |
107201 | -nodevicelib not working together with -mmcu=avr* devices | 13.3, 12.4 |
109650 | Wrong code with -Os (cc0 → CCmode fallout) | 13.2, 12.4 |
105753 | ICE: in add_clobbers, at config/avr/avr-dimode.md:2705 | 13.2, 12.4 |
99184 | Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc. | 12.3, 11.4, 10.5 |
90706 | Useless code generated for stack / register operations | 12.3 |
92729 | Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+ | 11.0 |
92055 | Support 64-bit double | 10.0 |
86040 | RAMPZ not cleared after reading from __flashN | 9.3, 8.4, 7.5 |
85805 | Wrong code for 64 bit comparisons on avr-gcc | 8.3 combine |
85495 | lto-wrapper.exe: fatal error: file too short: No error | 8.0 LTO |
83801 | String constant in __flash not put into .progmem | 8.0 C |
83729 | ICE in convert_memory_address_addr_space_1 at explow.c:300 | 8.0 C |
83738 | Don't save registers in main / auto-add OS_task to main | 8.0 |
81754 | Building of avr compiler broken | 8.0 |
20296 81268 |
Speeding up small ISRs Support __gcc_isr pseudo-instruction |
8.0 |
81075 | Move jump-tables out of .text | 8.0 |
81072 | Add XMEGA devices with flash seen in RAM address space | 8.0 |
84209 | Don't split SP in split2 | 7.4 |
81910 | ICE with "address" attribute on type | 7.3, 6.5, 5.5 |
81487 | ld.exe: error: asprintf failed | 7.2, 6.5, 5.5 mingw32 |
81473 | Build fails due to INT8_MIN and friends | 7.2 |
81407 | C++: Error if a variable in progmem needs constructing | 7.2, 6.5, 5.5 |
81305 | avrtiny uses LDS for SREG with -O0 | 7.2, 6.5, 5.5 |
80492 | Wrong code whith loop unrolling and local asm regs | 7.2, 6.4 tree |
79883 | i18n: untranslated "interrupt" or "signal" | 7.2, 6.5, 5.5 |
75964 | Insn-combiner removes comparison after ABS | 7.2, 6.5, 5.5 rtl |
78883 | ICE triggered by change to combine.c | 7.0 |
78562 | Wrong warning for built-in functions with -flto | 7.0 |
78093 | New variable attribute "absdata" to enable LDS / STS on Reduced Tiny | 7.0 |
71948 | Make progmem work on reduced Tiny by adding 0x4000 to symbols | 7.0 |
71678 | ICE from switch / case on long long (casesi + DImode) | 7.0 |
71676 | casesi won't handle switch values larger than 16 bits | 7.0 |
60300 | Minor prologue improvement w.r.t code size | 7.0 |
41076 | Pessimal code for logical OR of 8-bit fields | 7.0 |
67353 | Option-ize Warning "appears to be a misspelled signal / interrupt handler" | 6.5, 5.5 |
80462 | Incorrect warning: uninitialized variable 'xxx' put into program memory area | 6.4, 5.5 |
77326 | Invalid optimization omits comparison | 6.3, 5.5 |
72767 | Some branches report too small insn length | 6.2, 5.5 |
71976 | insn-combine removes 64-bit shift | 6.2, 5.5 |
71151 | Strings in .progmem.gcc_sw_section with -fdata-sections + const merging | 6.2 |
71103 | ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref | 6.2, 5.5, 4.9.4 |
71053 | volatile read-and-test loop optimized to test loop (without read) | 6.2 |
70677 | Disable -fcaller-saves per default | 6.2 |
30417 | Wrap spec generating -Tdata into %{!Tdata:...} | 6.2, 5.5, 4.9.4 |
67839 | Bit addressable instructions generated for invalid memory address | 6.0 |
65296 | fix various issues with avr specs files | 5.2 → avr-libc #44574 |
65192 | ICE: attiny: In tiny_valid_direct_memory_access_range | 5.0 (transient) |
52472 | ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g) | 5.0 |
Älter als v5
PR | Fixed | Note |
---|---|---|
65196 | ICE: avr_adjust_insn_length uses recog_memoized on invalid insn | 4.9.3 |
64452 | ICE: When passing struct member to varargs function | 4.9.3, 4.8.5 |
63633 | ICE: unrecognizable insn with mult insns | 4.9.3 |
63223 | Make jumptables work with -Wl,--section-start,.text= | 4.9.2 |
61443 | ICE: unrecognizable insn when varargs argument is indirect addr-space access | 4.9.1, 4.8.4 |
61055 | Wrong test instruction after increment (-O1 or -fno-peephole2) | 4.9.1, 4.8.3, 4.7.4 |
60991 | Stack corruption when using __memx pointers or __int24 in large stack frame | 4.9.1, 4.8.3, 4.7.4 |
56833 | Postreload uses clobbered register | 4.9.0 |
50807 | Constructor writing to RAM for variable in Flash | 4.9.0 |
60486 | Superfluous or missing comparision after addition or subtraction | 4.8.3 |
59396 | Wrong warning with ISR() and LTO | 4.8.3, 4.8.1 |
57844 | ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes | 4.8.2, 4.7.4 |
57631 | Use assembler name for sanity checking of ISR names | 4.8.2, 4.7.4 |
57516 | Incorrect fixed-point rounding result in the overflow case | 4.8.2 |
57506 | Some devices are present twice in avr-mcus.def | 4.8.2, 4.7.4 |
56263 | Provide strict address-space checking | 4.8.0 |
56064 | Fold VIEW_CONVERT_EXPR with FIXED_CST | 4.8.0 tree-ssa |
54814 | ICE: Hundreds of spill fails in test suite for class R0_REG | 4.8.0. |
54854 | Remove -mshort-calls option | 4.8.0 |
54815 | missed optimization with operations with constant operands | 4.8.0 |
54222 | ISO/IEC TR 18037 fixed-point support | 4.8.0 |
53344 | Assemble 3-byte symbols | 4.8.0 |
55974 | Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8 | 4.7.3 |
55897 | Allocate __memx data to .progmemx.data | 4.7.3 |
55243 | [ada] STAMP variable is not defined in t-avr | 4.7.3 |
50293 | -flto fails if GCC is installed in directory with space in path name | 4.7.3 |
54536 | Incorrect library_name for at90usb1287 | 4.7.2, 4.6.4 |
54476 | Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts | 4.7.2 |
54461 | Add configure option for better AVR-Libc integration | 4.7.2 |
54220 | Naked functions need frame at -O0 | 4.7.2, 4.6.4 |
53595 | Code size increase of +10% between two 4.7.1 snapshots | 4.7.2 |
53448 | __attribute__((aligned(2))) ignored | 4.7.1 |
53256 | Attribute 'interrupt' shall override attribute 'signal' | 4.7.1 |
53065 | ICE: in replace_reg_with_saved_mem, at caller-save.c:1125 | 4.7.1 |
53033 | Wrong register number for 3-byte loads via X | 4.7.1 |
52737 | -mtiny-stack shall not influence multilib selection | 4.7.1 |
52692 | Add support for avr-specific built-ins + LTO | 4.7.1 |
52545 | SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP | 4.7.1 other |
52543 | lower-subreg.c: code bloat of 300%-400% for multi-word memory splits | HACK 4.7.1 middle-end |
52508 | HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate | 4.7.1 |
52507 | movmem loop for __memx address space uses wrong loop label | 4.7.1 |
52506 | XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue | 4.7.1 |
52505 | __memx address space reading unintentionally from RAM | 4.7.1 |
52496 | avr-specific built-ins missing memory barrier | 4.7.1 |
52488 | ICE: unreconizable addqi -2000 insn | 4.7.1 |
52484 | Missing __memx insn because of wrong register footprint | 4.7.1 |
52461 | XMEGA+EBI: RAMPZ clobbered | 4.7.1 |
51527 | ICE: 'convert_to_integer' enters infinite recursion for __int24 | 4.7.1 c |
46261 | ICE: when compiled with -mint8 | 4.7.1, 4.6.4, 4.5.4 |
52261 | Add XMEGA support | 4.7.0 |
52148 | ICE: spill_failure for movmemhi | 4.7.0 |
51782 | Missing address-space information leads to wrong code | 4.7.0 middle-end |
51425 | no SBIS/SBIC instructions | 4.7.0 |
51409 | Building avr-gcc fails if configured for other languages than from C family | 4.7.0 |
51345 | Devices with 8-bit SP need their own multilib(s) | 4.7.0 ABI |
51050 | ICE: invalid rtl sharing found in the insn (ATtiny26) | 4.7.0 |
51002 | SP_H register is used even on targets that do not have it (ATtiny26) | 4.7.0 |
50931 | Support a 24-bit scalar integer mode | 4.7.0 |
50910 | Inefficient division by 2 | 4.7.0 |
50887 | Support ACCUMULATE_OUTGOING_ARGS | 4.7.0 |
50775 | Register allocator sets up frame and frame pointer with low register pressure | 4.7.0, ra |
50616 | ICE: lto1.exe: invalid resolution in the resolution file | 4.7.0, lto, mingw32 |
50566 | Add support for better logging by means of -mlog= | 4.7.0 |
50465 | Use insn attribute to depict if and how instruction lengths have to be adjusted | 4.7.0 |
50449 | Loading some 32-bit constants not optimal | 4.7.0 |
50448 | Missed optimization accessing struct component with integer address | 4.7.0 middle-end |
50447 | Better support of AND, OR, XOR and PLUS with constant integers | 4.7.0 |
50446 | Implement rotate patterns with offset 1 | 4.7.0 |
50358 | Implement [u]maddqihi4 [u]msubqihi4 patterns | 4.7.0 |
50063 | wrong code for gcc.dg/torture/pta-ptrarith-3.c | 4.7.0 |
49939 | Skip 2-word instructions if applicable | 4.7.0 |
49903 | Redundant comparisons in binary-seach switch/case expansion | 4.7.0 FIXME |
49881 | Inefficient stack manipulation around calls | 4.7.0 |
49868 | Implement named address space to place/access data in flash memory | 4.7.0 ← binutils PR13503 |
49864 | ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439 | 4.7.0 |
49687 | Missed optimization for widening MUL | 4.7.0 ABI |
49313 | Inefficient libgcc implementations for avr | 4.7.0 ABI |
47597 | ICE: call frame debugging information is not handled when case is post_dec | 4.7.0 |
46278 | avr-gcc 4.5.1 doing suboptimal reloads using X | 4.7.0 |
45099 | Warning could be issued for use of register variables that will fail. | 4.7.0 |
43746 | -fmerge-constants and -fmerge-all-constants don't work at AVR target | 4.7.0 |
42210 | optimizing assignment to a bit field | 4.7.0 |
39621 | Delaying operation to end of function causes high stack usage | 4.7.0 |
36467 | Missed optimization with pointer arithmetic and mul* | 4.7.0 |
35860 | [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types | 4.7.0 |
34888 | Stack patterns not optimal | 4.7.0 |
34792 | c++ worse than c compiler at 8-bit optimisations | 4.7.0 |
34791 | optimisation of 8-bit logic sometimes fails | 4.7.0 |
34790 | no sibling call optimisation | 4.7.0 |
34789 | sometimes the compiler keeps addresses in registers unnecessarily | 4.7.0 |
33049 | bit extraction non optimal, inversing logic solves problem | 4.7.0 |
29560 | Poor optimization for byte shifts | 4.7.0 |
29524 | [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked | 4.7.0 |
18145 | Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. | 4.7.0 |
17994 | avr-gcc does not output a dwarf2 .debug_frame section | 4.7.0 |
52741 | -mtiny-stack must not make assumptions on upper 8 bits of SP/FP | 4.6.4 |
51756 | Wrong warning: uninitialized variable put into program memory area | 4.6.3 |
51374 | insn combine reorders volatile memory accesses | 4.6.3 middle-end |
50820 | Use EIND consistently | 4.6.2, 4.5.4 |
50816 | Discriminators are emitted in DWARF 2 format | 4.6.2 |
50652 | Incorrect data start value for ATmega164A | 4.6.2 |
50289 | call-prologues saving/restoring global register variables | 4.6.2 |
49824 | Missing documentation for OS_task and OS_main attributes | 4.6.2 |
49764 | [avr-g++] Rejects attribute progmem | 4.6.2 |
49487 | ICE: bytewise rotate | 4.6.2 |
46779 | wrong code generation for values held in R28/R29 | 4.6.2, 4.5.4 |
34734 | attribute((progmem)) not handled properly in C++ for AVRs | 4.6.2 → avr-libc #33716 |
44643 | ICE: in c-typeck.c | 4.6.2 → avr-libc #32988 |
39633 | missing 8-bit comparison (*cmpqi) | 4.6.2, 4.5.4 |
39386 | different computation results for O1 and O0 executables | 4.6.2 |
48459 | [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2 | 4.6.1 |
45263 | registers used in __do_global_ctors can get clobbered | 4.6.1, 4.5.4 |
45261 | Doesn't indicate failure status when it doesn't support (attiny2313A) | 4.5.3 |
42240 | [4.3/4.4 Regression] wrong epilogue on naked function | 4.5.3 |
41885 | Rotate patterns do not correctly consider overlap. | 4.5.0 |