<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gjlayde</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gjlayde"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Gjlayde"/>
	<updated>2026-05-17T22:46:42Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107742</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107742"/>
		<updated>2025-10-19T19:16:46Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: PR64331&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR115726 115726] || Wrong code with __memx and local register variables&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107741</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107741"/>
		<updated>2025-10-19T19:08:47Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR115726 115726] || Wrong code with __memx and local register variables&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107740</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107740"/>
		<updated>2025-10-19T19:08:02Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR115726 115726] || Wrong code with __memx and local register variables&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107739</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107739"/>
		<updated>2025-10-19T18:59:47Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR115726 115726] || Wrong code with __memx and local register variables&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107738</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107738"/>
		<updated>2025-10-19T18:59:21Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR115726 115726] || Wrong code with __memx and local register variables&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107731</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107731"/>
		<updated>2025-10-11T13:50:46Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107729</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107729"/>
		<updated>2025-10-07T17:13:25Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */ 122187&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR122187 122187] || ICE in avr_out_extr&lt;br /&gt;
| 15.3, 14.4 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=107724</id>
		<title>Bitmanipulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bitmanipulation&amp;diff=107724"/>
		<updated>2025-10-02T21:28:34Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: avr-gcc weblink aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bitoperatoren ==&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren stammen ursprünglich aus dem Bereich des Maschinen-Codes und Assembler, existieren aber auch in den meisten Hochsprachen, wie C.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;    nach rechts schieben&lt;br /&gt;
&amp;lt;&amp;lt;    nach links schieben (Bsp.: a&amp;lt;&amp;lt;b ist das gleiche wie a * 2^b;&lt;br /&gt;
          bzw. bei 1&amp;lt;&amp;lt;3 wird die 1 um drei Stellen nach links geschoben)&lt;br /&gt;
|     bitweises ODER&lt;br /&gt;
&amp;amp;     bitweises UND&lt;br /&gt;
^     bitweises exklusives ODER&lt;br /&gt;
~     bitweises NICHT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitoperatoren in dieser Schreibweise können in Assemblercode für&lt;br /&gt;
konstante Ausdrücke benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt; &lt;br /&gt;
ldi temp, (1&amp;lt;&amp;lt;3) | (1&amp;lt;&amp;lt;1) | (1&amp;lt;&amp;lt;2) | (1&amp;lt;&amp;lt;0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
entspricht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt; &lt;br /&gt;
ldi temp, 8 | 2 | 4 | 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
entspricht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt; &lt;br /&gt;
ldi temp, 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmaske ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden ist häufiger von dem Begriff &#039;&#039;Bitmaske&#039;&#039; die Rede. Damit wird eine Folge von einzelnen Bits bezeichnet, die den Zustand null („0“) oder eins („1“) darstellen können.&lt;br /&gt;
&lt;br /&gt;
Bitmasken werden im allgemeinen dazu verwendet, um unter Anwendung eines Operators (z.&amp;amp;nbsp;B. UND, ODER, XOR) eine Eingabe zu manipulieren. Das Ergebnis ist dann die Anwendung des Operators und der Bitmaske auf die Eingabe.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Operator eine Funktion mit zwei Argumenten ist, dann lässt sich dessen Anwendung wie folgt schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Ergebnis = Operator( Eingabe, Bitmaske )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bitmaske ist häufig eine Konstante, da diese z.&amp;amp;nbsp;B. die Information über die Position einer Information in einem Register darstellt. Das kann z.&amp;amp;nbsp;B. ein Überlaufflag in einem Timer-Statusregister sein.&lt;br /&gt;
&lt;br /&gt;
== Bits setzen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf „eins“ gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial:_Logik#ODER|ODER]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske gleich „1“ sind, werden auf „1“ gesetzt. Alle Bits, die in der Maske auf „0“ gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
sbr r16, 0b11110000     ; setzt Bits 4..7 in r16, ist ein Pseudobefehl,&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16..r31&lt;br /&gt;
&lt;br /&gt;
ori r16, 0b11110000     ; setzt Bits 4..7 in r16, ori ist identisch mit sbr,&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16..r31&lt;br /&gt;
&lt;br /&gt;
sbi PORTB, 5            ; setzt Bit 5 in Port B;&lt;br /&gt;
sbi PORTB, PB5          ; identisch, besser lesbar;&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..0x1F&lt;br /&gt;
&lt;br /&gt;
                        ; Für IO-Register mit IO-Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden:&lt;br /&gt;
in  r16, TIMSK          ; setzt Bit TOIE1 in TIMSK&lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;TOIE1)&lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; Für IO-Register oberhalb der IO-Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwendet werden:&lt;br /&gt;
                        ; setzt Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B&lt;br /&gt;
sbr r16, (1&amp;lt;&amp;lt;RXCIE0)&lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachte den Unterschied! Eine „5“ würde von &amp;lt;code&amp;gt;sbr&amp;lt;/code&amp;gt; als „setze Bit 2 und 0“ gedeutet (=0b00000101), während &amp;lt;code&amp;gt;sbi&amp;lt;/code&amp;gt; sie als „setze Bit 5“ versteht. Der Befehl &#039;&#039;&#039;&amp;lt;code&amp;gt;sbr&amp;lt;/code&amp;gt;&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine ODER-Verknüpfung, während der Befehl &#039;&#039;&#039;&amp;lt;code&amp;gt;sbi&amp;lt;/code&amp;gt;&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] (C) ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von großen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard-C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PORTB |= 0xF0;   // Kurzschreibweise, entspricht PORTB = PORTB | 0xF0; bitweises ODER&lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */&lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1&lt;br /&gt;
#define MEINBIT2 2&lt;br /&gt;
&lt;br /&gt;
PORTB |= ((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // setzt Bit 0 und 2 in PORTB auf &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile „entschlüsselt“:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; n)&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Zuerst wird durch die „&amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;“-Ausdrücke eine „1“ n-mal nach links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für &amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; MEINBIT0)&amp;lt;/code&amp;gt; und 0b00000100 für &amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; MEINBIT2)&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft, also 0b00000001 &#039;&#039;oder&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;|=&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Diese Maske wird mit dem aktuellen Inhalt von PORTB bitweise ODER-verknüpft und das Ergebnis PORTB wieder zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PORTB |= variable;         // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB | variable; // lange Schreibweise&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111010, dann ist der Inhalt nach der Operation 0b01111010 &#039;&#039;oder&#039;&#039; 0b00000101 = 0b01111111, die gewünschten Bits sind somit gesetzt!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Will man das gezeigte Beispiel der Bitmanipulation auf größere Datentypen anwenden, ist zu beachten, dass der Compiler in der Operation &amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; MEINBIT1)&amp;lt;/code&amp;gt; stillschweigend, gemäß den C-Regeln, die 1 als Integer-Typ ansieht. Beim AVR-GCC bedeutet das 16-Bit/signed und die folgende Operation bringt ggf. nicht das gewünschte Ergebnis (Stichwort: „Integer Promotion“).&lt;br /&gt;
&lt;br /&gt;
Angenommen, Bit 15 soll in einer 32-Bit weiten Variable gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define MEINBIT15 15&lt;br /&gt;
#define MEINBIT42 42&lt;br /&gt;
&lt;br /&gt;
uint32_t reg_32; /* uint32_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
uint64_t reg_64; /* uint64_t definiert per typedef z.&amp;amp;nbsp;B. in stdint.h */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= (1 &amp;lt;&amp;lt; MEINBIT15);              /* FEHLER: Setzt die Bits 31..15, da ((int)1 &amp;lt;&amp;lt; 15) == 0xFFFF8000 */&lt;br /&gt;
&lt;br /&gt;
reg_32 |= ((uint32_t)1 &amp;lt;&amp;lt; MEINBIT15);    /* Hier wird nur Bit 15 gesetzt. */&lt;br /&gt;
reg_32 |= (1U &amp;lt;&amp;lt; MEINBIT15);             /* */&lt;br /&gt;
reg_32 |= (1L &amp;lt;&amp;lt; MEINBIT15);             /* andere Schreibweise. */&lt;br /&gt;
reg_64 |= (1LL &amp;lt;&amp;lt; MEINBIT42);            /* Hier wird nur Bit 42 gesetzt,&lt;br /&gt;
                                            andere Schreibweise für 64 Bit (long long). */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Compilern für 32-bit-Controller (z.&amp;amp;nbsp;B. ARM7TDMI) sind Integers per default 32-bit und Konstanten sind somit implizit ebenfalls 32-bit weit. Man sollte aber dennoch die oben gezeigte Vorgehensweise verwenden, um Probleme zu vermeiden, die entstehen könnten, wenn Code unter verschiedenen Plattformen/Compilern verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Bits löschen ==&lt;br /&gt;
&lt;br /&gt;
Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] auf „null“ gesetzt werden sollen, wird dies durch eine [[AVR-Tutorial: Logik#UND|UND]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske gleich „0“ sind, werden auf „0“ gesetzt. Alle Bits, die in der Maske auf „1“ gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
cbr r16, 0b00001111     ; löscht Bits 0..3 in r16, ist ein Pseudobefehl,&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16..r31&lt;br /&gt;
&lt;br /&gt;
andi r16, 0b11110000    ; löscht Bits 0..3 in r16, andi ist identisch mit cbr,&lt;br /&gt;
                        ; funktioniert nur für die Arbeitsregister r16..r31&lt;br /&gt;
&lt;br /&gt;
andi r16, ~0b00001111   ; andere Schreibweise, hier wird die Bitmaske durch ~ invertiert,&lt;br /&gt;
                        ; dadurch kann man einfach alle zu löschenden Bit als &#039;1&#039; angeben&lt;br /&gt;
                        ; so wie bei den Bitmasken für das Setzen von Bits (positive Logik)&lt;br /&gt;
&lt;br /&gt;
cbi PORTB, 5            ; löscht Bit 5 in Port B&lt;br /&gt;
cbi PORTB, PB5          ; identisch, besser lesbar&lt;br /&gt;
                        ; funktioniert nur für die IO-Register 0..31&lt;br /&gt;
&lt;br /&gt;
                        ; Für IO-Register mit IO-Adresse 0x20..0x3F muss&lt;br /&gt;
                        ; in/out verwendet werden, weil dieser Bereich nicht&lt;br /&gt;
                        ; bitadressierbar ist:&lt;br /&gt;
in  r16, TIMSK          ; löscht Bit TOIE1 in TIMSK&lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;TOIE1&lt;br /&gt;
out TIMSK, r16&lt;br /&gt;
&lt;br /&gt;
                        ; Für IO-Register oberhalb der IO-Adresse 0x3F muss&lt;br /&gt;
                        ; lds/sts verwendet werden:&lt;br /&gt;
                        ; löscht Bit RXCIE0 in UCSR0B&lt;br /&gt;
lds r16, UCSR0B &lt;br /&gt;
cbr r16, 1&amp;lt;&amp;lt;RXCIE0&lt;br /&gt;
sts UCSR0B, r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch hier gilt: Man beachte den Unterschied! Eine „5“ würde von &amp;lt;code&amp;gt;cbr&amp;lt;/code&amp;gt; als „lösche Bit 2 und 0“ gedeutet, während &amp;lt;code&amp;gt;cbi&amp;lt;/code&amp;gt; sie als „lösche Bit 5“ versteht. Der Befehl &#039;&#039;&#039;&amp;lt;code&amp;gt;cbr&amp;lt;/code&amp;gt;&#039;&#039;&#039; erwartet ein Bit&#039;&#039;&#039;muster&#039;&#039;&#039; für eine UND-NOT-Verknüpfung (nicht zu verwechseln mit NAND), während der Befehl &#039;&#039;&#039;&amp;lt;code&amp;gt;cbi&amp;lt;/code&amp;gt;&#039;&#039;&#039; die Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; benötigt. Darauf sind auch die Includefiles von Atmel im AVR-Studio (Assembler) als auch [[WinAVR]] (C) ausgelegt. Die Namen der Bits sind als Bit&#039;&#039;&#039;nummer&#039;&#039;&#039; definiert. Das ist wichtig, wenn man Register von großen AVRs manipuliert, z.&amp;amp;nbsp;B. ATmega48. Hier muss aus der Bitnummer über eine Schiebeoperation „&amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;“ erst das Bit&#039;&#039;&#039;muster&#039;&#039;&#039; gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== Standard-C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= 0xF0;   // entspricht PORTB = PORTB &amp;amp; 0xF0; bitweises UND&lt;br /&gt;
                 // Bits 0..3 (das &amp;quot;niederwertige&amp;quot; Nibble) werden gelöscht&lt;br /&gt;
&lt;br /&gt;
/* übersichtlicher mittels Bit-Definitionen */&lt;br /&gt;
#define MEINBIT0 0&lt;br /&gt;
#define MEINBIT1 1  &lt;br /&gt;
#define MEINBIT2 2  &lt;br /&gt;
&lt;br /&gt;
PORTB &amp;amp;= ~((1 &amp;lt;&amp;lt; MEINBIT0) | (1 &amp;lt;&amp;lt; MEINBIT2)); // löscht Bits 0 und 2 in PORTB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile entschlüsselt:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; n)&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Zuerst wird durch die „&amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;“-Ausdrücke eine „1“ n-mal nach links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für &amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; MEINBIT0)&amp;lt;/code&amp;gt; und 0b00000100 für &amp;lt;code&amp;gt;(1 &amp;amp;lt;&amp;amp;lt; MEINBIT2)&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Das Ergebnis wird bitweise ODER-verknüpft, also 0b00000001 &#039;&#039;oder&#039;&#039; 0b00000100 wird zu 0b00000101.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;&#039;&#039;&#039; : Der Wert in der Klammer wird bitweise invertiert, aus 0b00000101 wird 0b11111010.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;&amp;amp;=&amp;lt;/code&amp;gt;&#039;&#039;&#039; : PORTB wird mit der berechneten Maske UND-verknüpft und das Ergebnis wieder PORTB zugewiesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PORTB &amp;amp;= variable;          // Kurzschreibweise&lt;br /&gt;
PORTB  = PORTB &amp;amp; variable;  // lange Schreibweise&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Ist PORTB vorher z.&amp;amp;nbsp;B. 0b01111111, dann ist der Inhalt nach der Operation 0b01111111 &#039;&#039;und&#039;&#039; 0b11111010 = 0b01111010, die gewünschten Bits 0 und 2 sind somit gelöscht.&lt;br /&gt;
&lt;br /&gt;
Die C-Ausdrücke mittels Definitionen von Bitnummern und Schiebeoperator (&amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;) sehen auf den ersten Blick etwas „erschreckend“ aus und sind mehr „Tipparbeit“, funktionieren aber universell und sind deutlicher und nachvollziehbarer als „handoptimierte“ Konstanten. Bei eingeschalteter Optimierung löst der Compiler die Ausdrücke mit konstanten Werten bereits zur Compilierungszeit auf und es entsteht kein zusätzlicher Maschinencode. Bei AVR sind die Definitionen meist Teil der Entwicklungsumgebungen (bei avr-libc z.&amp;amp;nbsp;B. implizit durch &amp;lt;code&amp;gt;#include &amp;amp;lt;avr/io.h&amp;amp;gt;&amp;lt;/code&amp;gt;). Sie entsprechen den Angaben und Beispielen in den Datenblättern und sind damit &#039;&#039;de facto&#039;&#039; ein Standard beim Zugriff auf Bits in Hardware-Registern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtiger Hinweis&#039;&#039;&#039;: Die ODER-Verknüpfung und die anschließende Invertierung kann man nicht vertauschen (Theorem von DeMorgan)! Folgendes Beispiel soll die Richtigkeit der Aussage zeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 ~(0b0001 | 0b0010) == 0b1100&lt;br /&gt;
  ~0b0001 | ~0b0010 == 0b1111&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Noch ein wichtiger Hinweis&#039;&#039;&#039;: Der Operator &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; mit einem Operanden vom Typ &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; negiert nur so viele Bits, wie der Typ &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; hat.&lt;br /&gt;
Will man ein Bit in einer breiteren Variablen löschen, dann sollte die nach links zu shiftende „1“ den Typ dieser Variablen haben.&lt;br /&gt;
&lt;br /&gt;
Ein Programm, welches das verdeutlicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, const char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    int bit = 60;&lt;br /&gt;
    uint64_t ui64;&lt;br /&gt;
    printf(&amp;quot;sizeof(int)=%d\n&amp;quot;, (int)sizeof(int));&lt;br /&gt;
    &lt;br /&gt;
    ui64 = 0xFFFFFFFFFFFFFFFF;    &lt;br /&gt;
    ui64 &amp;amp;= ~(1&amp;lt;&amp;lt;60); /* Keine Wirkung bei sizeof(int) &amp;lt; 8 */&lt;br /&gt;
    /* gcc warnt sogar:    &lt;br /&gt;
     * gcc -Wall bit_clear.c -o bit_clear&lt;br /&gt;
     * bit_clear.c: In function ‘main’:&lt;br /&gt;
     * bit_clear.c:11:5: warning: left shift count &amp;gt;= width of type [enabled by default]&lt;br /&gt;
     */    &lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, ui64!=0xFFFFFFFFFFFFFFFF);&lt;br /&gt;
&lt;br /&gt;
    ui64 = 0xFFFFFFFFFFFFFFFF;    &lt;br /&gt;
    ui64 &amp;amp;= ~((uint64_t)1&amp;lt;&amp;lt;60); /* OK */&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, ui64!=0xFFFFFFFFFFFFFFFF);&lt;br /&gt;
&lt;br /&gt;
    ui64 = 0xFFFFFFFFFFFFFFFF;&lt;br /&gt;
    ui64 &amp;amp;= ~(1LL&amp;lt;&amp;lt;60); /* auch OK, und kürzer */&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, ui64!=0xFFFFFFFFFFFFFFFF);&lt;br /&gt;
&lt;br /&gt;
    ui64 = 0xFFFFFFFFFFFFFFFF;&lt;br /&gt;
    ui64 &amp;amp;= ~(1&amp;lt;&amp;lt;bit); /* Ohne Warnung, und funktioniert manchmal, je nach Optimierung */&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, ui64!=0xFFFFFFFFFFFFFFFF);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
/* Ausgabe auf meinem PC ohne Optimierung:&lt;br /&gt;
 * sizeof(int)=4&lt;br /&gt;
 * 0&lt;br /&gt;
 * 1&lt;br /&gt;
 * 1&lt;br /&gt;
 * 1&lt;br /&gt;
 * Ausgabe auf meinem PC mit -O2&lt;br /&gt;
 * 0&lt;br /&gt;
 * 1&lt;br /&gt;
 * 1&lt;br /&gt;
 * 0&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Niederwertigstes gesetztes Bit löschen (Standard-C) ===&lt;br /&gt;
&lt;br /&gt;
Folgender Code löscht von allen 1-Bits in einer Integer-Variablen das niederwertigste, unabhängig von der Position desselben.&lt;br /&gt;
&lt;br /&gt;
Beispiel: 01101000 → 01100000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t byte;&lt;br /&gt;
&lt;br /&gt;
byte = irgendwas();&lt;br /&gt;
&lt;br /&gt;
byte = byte &amp;amp; (byte - 1); /* Diese seltsame Operation löscht das&lt;br /&gt;
                             niederwertigste 1-Bit */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte  :   01101000&lt;br /&gt;
Byte-1:   01100111&lt;br /&gt;
Ergebnis: 01100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert also mit jeder beliebigen Zahl.&lt;br /&gt;
&lt;br /&gt;
Dies kann bspw. zur schnellen Paritätsgenerierung eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t pareven(uint8_t byte) {&lt;br /&gt;
  uint8_t par = 0;&lt;br /&gt;
&lt;br /&gt;
  while(byte) {&lt;br /&gt;
    byte = byte &amp;amp; (byte - 1);&lt;br /&gt;
    par = ~par;&lt;br /&gt;
  }&lt;br /&gt;
  return par;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das genannte gilt natürlich nicht nur für 8-Bit-Integers, sondern für beliebige, vom Compiler unterstützte Wortlängen.&lt;br /&gt;
&lt;br /&gt;
== Bits invertieren ==&lt;br /&gt;
&lt;br /&gt;
Im allgemeinen Sprachgebrauch oft &#039;&#039;&#039;Toggeln&#039;&#039;&#039; genannt (aus dem Englischen: &#039;&#039;to toggle&#039;&#039;). Wenn in einem Byte mehrere [[Digitaltechnik|Bits]] invertiert („getoggelt“) werden sollen, wird dies durch eine [[AVR-Tutorial: Logik#XOR (Exklusives Oder)|XOR]]-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske gleich „1“ sind, werden invertiert. Alle Bits, die in der Maske auf „0“ gesetzt sind, bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
Bei [[AVR]]s erlaubt dies folgender Assemblercode. Hier wird ein Ausgangspin invertiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
  sbic  PortB, 0    ; Überspringe den nächsten Befehl, wenn das Bit 0 im Port gelöscht ist&lt;br /&gt;
  rjmp  ClrBitNow   ; Springe zu ClrBitNow&lt;br /&gt;
  sbi   PortB, 0    ; Setze Bit 0 in PortB&lt;br /&gt;
  rjmp  BitReady    ; Springe zu BitReady&lt;br /&gt;
ClrBitNow:&lt;br /&gt;
  cbi  PortB, 0    ; Lösche Bit 0 in PortB&lt;br /&gt;
BitReady:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Noch kürzer geht&#039;s so:&#039;&#039;&#039; Die zweite Zeile mit dem Befehl &amp;lt;code&amp;gt;ldi&amp;lt;/code&amp;gt; lädt die Bitmaske, in welcher die zu toggelnden Bits auf „1“ gesetzt sind. In diesem Beispiel wird das dritte Bit invertiert. Der Vorteil dieser Methode ist neben der Kürze und Übersichtlichkeit auch die Möglichkeit, bis zu acht Bits gleichzeitig zu toggeln. Diese Methode ist natürlich auch auf normale Daten anwendbar, nicht nur auf IO-Ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
 in     R24, PORTE   ; Daten lesen&lt;br /&gt;
 ldi    R25, 0x04    ; Bitmaske laden, hier Bit #2&lt;br /&gt;
 eor    R24, R25     ; Exklusiv ODER&lt;br /&gt;
 out    PORTE, R24   ; Daten zurückschreiben&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit gibt es, wenn man nur das 8. Bit kippen will:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
 in      r16, PORTB&lt;br /&gt;
 subi    r16, 0x80&lt;br /&gt;
 out     PORTB, r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard-C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 PORTB ^= (1&amp;lt;&amp;lt;PB0);    /* XOR, Kurzschreibweise für PORTB = PORTB ^ (1&amp;lt;&amp;lt;PB0) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neuere ATmegas ===&lt;br /&gt;
&lt;br /&gt;
Bei den neueren ATmegas (z.&amp;amp;nbsp;B. ATmega48) kann man (auf Ausgang gesetzte) IO-Pins direkt ohne den Umweg über Register toggeln, indem man das entsprechende Bit im PINx-Register &#039;&#039;setzt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
sbi PIND, 2       ; Bit 2 von Port D toggeln&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8051er ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
cpl bitadresse&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bits prüfen ==&lt;br /&gt;
&lt;br /&gt;
Will man prüfen, ob ein oder mehrere Bits in einer Variablen gesetzt oder gelöscht sind, muss man sie mit einer Bitmaske UND-verknüpfen. Die Bitmaske muss an den Stellen der zu prüfenden Bits eine „1“ haben, an allen anderen eine „0“.&lt;br /&gt;
&lt;br /&gt;
* Ist das Ergebnis gleich null, sind alle geprüften Bits gelöscht.&lt;br /&gt;
* Ist das Ergebnis ungleich null, ist mindestens ein geprüftes Bit gesetzt.&lt;br /&gt;
* Ist das Ergebnis gleich der Bitmaske, sind alle geprüften Bits gesetzt.&lt;br /&gt;
&lt;br /&gt;
=== AVR-Assembler ===&lt;br /&gt;
&lt;br /&gt;
Der AVR hat spezielle Befehle, um direkt einzelne Bits in den CPU-Registern r0…r31 sowie den IO-Registern 0…0x1F zu prüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Befehle zur Prüfung von einzelnen Bits&lt;br /&gt;
&lt;br /&gt;
    sbrs    r16,3       ; überspringe den nächsten Befehl, wenn in r16 Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbrc    r16,5       ; überspringe den nächsten Befehl, wenn in r16 Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
    sbis    timsk,3     ; überspringe den nächsten Befehl, wenn in timsk Bit #3 gesetzt ist&lt;br /&gt;
    rjmp    bit_ist_nicht_gesetzt&lt;br /&gt;
&lt;br /&gt;
    sbic    timsk,5     ; überspringe den nächsten Befehl, wenn in timsk Bit #5 gelöscht ist&lt;br /&gt;
    rjmp    bit_ist_nicht_geloescht&lt;br /&gt;
&lt;br /&gt;
; Befehle zur Prüfung von mehreren Bits&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    breq    alle_bits_sind_geloescht&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    brne    mind_ein_bit_ist_gesetzt&lt;br /&gt;
&lt;br /&gt;
    andi    r16,0b1010  ; prüfe Bit #1 und #3 in r16&lt;br /&gt;
    cpi     r16,0b1010&lt;br /&gt;
    breq    alle_bits_sind_gesetzt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard-C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // prüfe, ob Bit 4 in der Variablen tmp gelöscht ist&lt;br /&gt;
    // die Klammer ist wichtig!&lt;br /&gt;
    if (!(tmp &amp;amp; 0x10)) {&lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe, ob Bit 0 und Bit 4 in der Variablen tmp gelöscht sind&lt;br /&gt;
    // die Klammer ist wichtig!&lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0) {&lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gelöscht sind&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe, ob Bit 0 oder Bit 4 in der Variablen tmp gesetzt ist&lt;br /&gt;
    if (tmp &amp;amp; 0x11) {&lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe, ob Bit 0 oder Bit 4 in der Variablen tmp gelöscht sind&lt;br /&gt;
    if (~tmp &amp;amp; 0x11) {&lt;br /&gt;
       // hier die Anweisungen, wenn mindestens ein Bit gelöscht ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe, ob Bit 4 in der Variablen tmp gesetzt ist&lt;br /&gt;
    if (tmp &amp;amp; 0x10) {&lt;br /&gt;
       // hier die Anweisungen, wenn das Bit gesetzt ist&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // prüfe, ob Bit 0 und Bit 4 in der Variablen tmp gesetzt sind&lt;br /&gt;
    // die Klammer ist wichtig!&lt;br /&gt;
    if ((tmp &amp;amp; 0x11) == 0x11) {&lt;br /&gt;
       // hier die Anweisungen, wenn beide Bits gesetzt sind&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfsfunktionen zur Bitmanipulation in C/C++ ==&lt;br /&gt;
Um &amp;quot;einfacher&amp;quot; elementare Bitmanipulationen durchzuführen bietet es sich an einige Hilfsfunktionen zu definieren. Dabei gibt es zwei verschiedene Möglichkeiten diese zu realiseren:&lt;br /&gt;
* Als C-Makro [[C_Makros]]&lt;br /&gt;
* Als Inline-Funktion&lt;br /&gt;
In beiden Fällen wird bei eingeschalteter Optimierung letztendlich vom Compiler ein sehr kompakter (und identischer!) Code erzeugt, jedoch ist dringend von der Verwendung von Makros abzuraten (siehe [[Makro]] )!&lt;br /&gt;
Im Fehlerfall zeigt der Compiler bei der Verwendung vom Makros keine eindeutigen Fehlermeldungen an, da es sich um simple Ersetzungen handelt - bei der Verwendung von Inline-Funktionen hingegen gibt es eine &amp;quot;brauchbare&amp;quot; Fehlermeldung!&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - Inline Variante ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen über Pointer&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(&amp;amp;PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR(&amp;amp;PORTC, PB0);&lt;br /&gt;
&lt;br /&gt;
// PORTA, PB2 direkt setzen&lt;br /&gt;
// HIGH&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 1);&lt;br /&gt;
&lt;br /&gt;
// LOW&lt;br /&gt;
BIT_BOOL_SET(&amp;amp;PORTA, PB2, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele - MakroVariante ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Achtung: Zugriffe erfolgen direkt über die Variablen/Portnamen&lt;br /&gt;
// PORTA, PB2 setzen&lt;br /&gt;
BIT_SET(PORTA, PB2);&lt;br /&gt;
&lt;br /&gt;
// PORTC, PB0 löschen&lt;br /&gt;
BIT_CLEAR(PORTC, PB0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Hilfsfunktionen verwenden zu können einfach folgenden Code in eine neue Header-Datei (z.B. BitIO.h) kopieren:&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als Inline-Methoden ===&lt;br /&gt;
Achtung: Wenn nur ein C Compiler verwendet wird, kennt dieser den Typ &amp;quot;bool&amp;quot; nicht, dieser muss dann vorher definiert werden!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 *  BitIO.h&lt;br /&gt;
 *	@author 	Andi Dittrich &amp;lt;http://andidittrich.de&amp;gt;&lt;br /&gt;
 *	@version	1.0&lt;br /&gt;
 *	@license	MIT Style X11 License&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef BITIO_H_&lt;br /&gt;
#define BITIO_H_&lt;br /&gt;
&lt;br /&gt;
// set bit&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_SET(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target |= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set clear&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_CLEAR(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target &amp;amp;= ~(1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// bit toogle&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_TOGGLE(volatile uint8_t *target, uint8_t bit){&lt;br /&gt;
	*target ^= (1&amp;lt;&amp;lt;bit);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set bit by boolean&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable) __attribute__((always_inline));&lt;br /&gt;
static inline void BIT_BOOL_SET(volatile uint8_t *target, uint8_t bit, bool enable){&lt;br /&gt;
	if (enable){&lt;br /&gt;
		BIT_SET(target, bit);&lt;br /&gt;
	}else{&lt;br /&gt;
		BIT_CLEAR(target, bit);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif /* BITIO_H_ */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hilfsfunktionen als C-Makro (nicht empfohlen) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Bit setzen */&lt;br /&gt;
#define set_bit(var, bit) ((var) |= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit löschen */&lt;br /&gt;
#define clear_bit(var, bit) ((var) &amp;amp;= (unsigned)~(1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
 &lt;br /&gt;
/* Bit togglen */&lt;br /&gt;
#define toggle_bit(var,bit) ((var) ^= (1 &amp;lt;&amp;lt; (bit)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bitmanipulation beim MSP430 ==&lt;br /&gt;
&lt;br /&gt;
Beim MSP430 und dessen Compilern sind die Bitnamen meist anders definiert. Und zwar nicht als Bitnummer, sondern als Bitmuster. Darum schreibt man dort die Bitzugriffe in C anders. Das kann auch bei anderen Mikrocontrollern bzw. C-Compilern so sein. Wichtig ist, dass man seine eignen Definitionen in der gleichen Weise wie der Compiler anlegt, um Verwirrung zu vermeiden, siehe [[Strukturierte Programmierung auf Mikrocontrollern]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Definition von Bitnamen in den Headerfiles des Compilers&lt;br /&gt;
&lt;br /&gt;
#define PD4 4               // Definition im AVR GCC als Bitnummer&lt;br /&gt;
#define PD5 5&lt;br /&gt;
&lt;br /&gt;
#define P14 (1&amp;lt;&amp;lt;4)          // Definition im MSP430 GCC als Bitmuster&lt;br /&gt;
#define P15 (1&amp;lt;&amp;lt;5)&lt;br /&gt;
&lt;br /&gt;
// Bitmanipulation im Programm&lt;br /&gt;
 &lt;br /&gt;
   DDRD = (1&amp;lt;&amp;lt;PD5) | (1&amp;lt;&amp;lt;PD4);   // AVR GCC&lt;br /&gt;
   P1DIR = P15 | P14;            // MSP430 GCC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/179566#1729219 Forumsbeitrag]: Bits aus einem Array extrahieren&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/169509#1631439 Forumsbeitrag]: Bits für ein Schieberegister zusammenstellen, TLC5941&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/353071?goto=3947567#3947567 Forumsbeitrag]: TLC5947 und ATmega16 Bitmanipulation&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/15466?goto=107726#107720 Forumsbeitrag]: Bitreihenfolge ändern&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/386393#4418405 Forumsbeitrag]: Übersichtliche Abfrage von vielen Pins&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/394065#4527806 Forumsbeitrag]: Verschiedene Möglichkeiten der Bitmanipulation bei IO-Registern&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/onlinedocs/gcc/AVR-Built-in-Functions.html AVR Built-in Functions] – spezielle Funktion im avr-gcc zur schnellen Bitvertauschung (englisch)&lt;br /&gt;
* Sean Eron Anderson: [https://graphics.stanford.edu/~seander/bithacks.html Bit Twiddling Hacks] – Sammlung von komplexeren Bitmanipulationen (englisch)&lt;br /&gt;
* Günther Jena: [https://www.semiversus.com/dic/mikrocontroller/bitmanipulation.html Bitmanipulation mit C] – mit Übungen&lt;br /&gt;
&lt;br /&gt;
[[Category:8051]]&lt;br /&gt;
[[Category:AVR-Arithmetik]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bin%C3%A4re_Daten_zum_Programm_hinzuf%C3%BCgen&amp;diff=107582</id>
		<title>Binäre Daten zum Programm hinzufügen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bin%C3%A4re_Daten_zum_Programm_hinzuf%C3%BCgen&amp;diff=107582"/>
		<updated>2025-07-10T09:45:41Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: #enbed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Will man beliebige Daten einem Programm hinzufügen (z.B. Bitmaps, Fonts, Seriennummern, ...) gibt es dafür mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
== Einfügen als C-Array ==&lt;br /&gt;
&lt;br /&gt;
Die Daten werden mit einem Hilfsprogramm in ein C-Array umgewandelt und dann in die Anwendung einkompiliert. Zum Umwandeln &lt;br /&gt;
von Binärdaten in ein C-Array gibt es bereits einige fertige Lösungen. So kann z.B. der kostenlose Hexeditor [http://mh-nexus.de/en/hxd/ HxD]&lt;br /&gt;
eine Datei als C-Array exportieren. Mit Hilfe des Kommandozeilentools srec_cat ist dies ebenfalls möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ srec_cat my_data.bin -binary -output my_c_file.c -c-Array my_var_name -include&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird dann eine C-Datei erzeugt die ein Array &amp;lt;tt&amp;gt;my_var_name&amp;lt;/tt&amp;gt; und einige Hilfsvariablen dazu enthält.&lt;br /&gt;
Diese Datei wird dann ins Projekt eingebunden und ganz normal verwendet. &lt;br /&gt;
&lt;br /&gt;
Beim avr-gcc ist noch darauf zu achten, dass die Daten — falls gewünscht — im Programmspeicher und nicht im RAM landen. Siehe [[AVR-GCC-Tutorial#Programmspeicher (Flash)|AVR-GCC Tutorial]]&lt;br /&gt;
&lt;br /&gt;
; Vorteile:&lt;br /&gt;
* Einfach zu verwenden&lt;br /&gt;
* Portabel&lt;br /&gt;
* Typsicher&lt;br /&gt;
; Nachteile:&lt;br /&gt;
* Zusätzliche Dateien (c/h) nötig&lt;br /&gt;
* C-Datei bei großen Binärdateien sehr groß&lt;br /&gt;
* Ein zusätzlicher Schritt beim Bauen nötig&lt;br /&gt;
* Daten müssen zum Zeitpunkt des Kompilierens bekannt sein&lt;br /&gt;
&lt;br /&gt;
== objcopy ==&lt;br /&gt;
&lt;br /&gt;
Mit objcopy wird aus der Binärdatei eine Objektdatei erstellt die zum Projekt gelinkt werden kann.&lt;br /&gt;
Hier ein Beispiel wie das mit den GNU-Tools für den AVR gemacht wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ avr-objcopy -I binary my_data.bin --binary-architecture avr4 -O elf32-avr my_data.o&lt;br /&gt;
$ avr-nm -t my_data.o &lt;br /&gt;
000008c6 D _binary__home_mat_my_data_bin_end&lt;br /&gt;
000008c6 A _binary__home_mat_my_data_bin_size&lt;br /&gt;
00000000 D _binary__home_mat_my_data_bin_start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Objektdatei enthält dann drei Symbole, deren Namen allerdings etwas unhandlich sind und — je nach Aufruf von objcopy — auch noch den kompletten Pfad der Binärdatei enthalten. Es ist allerdings möglich, mit einem weiteren Aufruf von objcopy den Symbolen brauchbarere Namen zu verpassen. Dieses Datenpaket kann dann in C verwendet werden, wenn man folgende Zeile einfügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern unsigned char _binary__home_mat_my_data_bin_start[];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Linken des Projekts wird die Objekdatei dann mit zum Projekt hinzu gelinkt.&lt;br /&gt;
&lt;br /&gt;
; Vorteile:&lt;br /&gt;
* Keine zusätzliche Datei nötig&lt;br /&gt;
* Keine manuell zu verwaltende Adresse&lt;br /&gt;
; Nachteile:&lt;br /&gt;
* Nicht komplett portabel. Der Aufruf von objcopy ist je nach System immer etwas unterschiedlich.&lt;br /&gt;
* Unhandliche Symbolnamen, mögliche Lösung siehe unten&lt;br /&gt;
* Nicht typsicher&lt;br /&gt;
* Daten müssen zum Zeitpunkt des Linkens bekannt sein&lt;br /&gt;
&lt;br /&gt;
Standardmäßig gehen die Daten ins Datensegment (.data). Da man die (meist umfangreichen) Daten beim AVR im Flash haben möchte, erweitert sich die Kommandozeile für ein Makefile:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Makefile&amp;quot;&amp;gt;&lt;br /&gt;
spDINER.o: TomsDiner.lpc		# Explizite Regel: Zieldatei: Quelldatei&lt;br /&gt;
	avr-objcopy -I binary \		# Eingabedatei binär&lt;br /&gt;
-O elf32-avr \					# Ausgabedatei ELF&lt;br /&gt;
--rename-section .data=.progmem.1,contents \	# Ausgabe-Sektion &amp;quot;.progmem&amp;quot; =&lt;br /&gt;
\						# in den unteren 64 K Flash vom Linker einbauen lassen&lt;br /&gt;
--redefine-sym _binary_$(subst .,_,$&amp;lt;)_start=$(@:.o=) \	# Das umständliche Startsymbol...&lt;br /&gt;
\						# durch Zieldateiname ohne &amp;quot;.o&amp;quot; ersetzen&lt;br /&gt;
-N _binary_$(subst .,_,$&amp;lt;)_end \	# Das Endesymbol löschen (optional)&lt;br /&gt;
-N _binary_$(subst .,_,$&amp;lt;)_size \	# Das Längensymbol löschen (optional)&lt;br /&gt;
$&amp;lt; \					# Eingabedatei&lt;br /&gt;
$@						# Ausgabedatei&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider ist es mit avr-objcopy nicht möglich, dem (hier umbenannten) Start-Symbol (im Beispiel: &#039;&#039;&#039;spDINER&#039;&#039;&#039;) die Eigenschaft &amp;quot;STT_OBJECT&amp;quot; zu verpassen. (In der Symboltabelle erscheint dann bei &#039;&#039;&#039;avr-objdump -t&#039;&#039;&#039; ein &amp;quot;O&amp;quot;.)&lt;br /&gt;
Dadurch wird der Disassembler &#039;&#039;&#039;avr-objdump -d&#039;&#039;&#039; die Binärdaten als (sinnlosen) Kode disassemblieren anstatt die Bytes uninterpretiert auszuspucken. Patcht man mit einem Hex-Editor dieses Bit hinzu, funktioniert die Disassemblierung korrekt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Vergisst man beim Aufruf von &#039;&#039;&#039;objcopy&#039;&#039;&#039; die Zieldatei, wird die Quelldatei überschrieben!! Das ist fatal, wenn die Quelldatei keine Zwischendatei in einem Makefile darstellt.&lt;br /&gt;
&lt;br /&gt;
== .incbin ==&lt;br /&gt;
&lt;br /&gt;
Die GNU Binutils bieten die Direktive &amp;lt;tt&amp;gt;.incbin&amp;lt;/tt&amp;gt; mit welcher der Binärinhalt einer Datei eingefügt werden kann.  Dazu legt man ein Assembler-Modul mydata.S an und includiert die gewünschte Datei:&lt;br /&gt;
&lt;br /&gt;
In mydata.S&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.section .progmem.data,&amp;quot;a&amp;quot;,@progbits&lt;br /&gt;
.global my_data&lt;br /&gt;
.type   my_data,@object&lt;br /&gt;
my_data:&lt;br /&gt;
.incbin &amp;quot;maydata.bin&amp;quot;&lt;br /&gt;
.size my_data, .-my_data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Assembler-Datei wird mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -c my_data.S&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
assembliert und die resultierende Object-Datei &amp;lt;tt&amp;gt;my_data.o&amp;lt;/tt&amp;gt; zum Executable hinzugelinkt. Im C-Programm definiert man für der Zugriff auf die Daten den Prototyp&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern unsigned char my_data[];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Vorteile:&lt;br /&gt;
* Keine manuell zu verwaltende Adresse&lt;br /&gt;
* Frei wählbarer Symbolname&lt;br /&gt;
* Funktionierende Disassemblierung&lt;br /&gt;
; Nachteile:&lt;br /&gt;
* Nur mit den GNU-Binutils anwendbar&lt;br /&gt;
* Nicht typsicher&lt;br /&gt;
* Extra Assembler-Datei notwendig&lt;br /&gt;
* Daten müssen zum Zeitpunkt des Linkens bekannt sein&lt;br /&gt;
&lt;br /&gt;
== srec_cat ==&lt;br /&gt;
&lt;br /&gt;
Wenn die Ausgabedatei des Compilers eine HEX-Datei ist (typisch bei µC Anwendungen) dann kann die Binärdatei mit Hilfe von srec_cat in die original Datei eingefügt werden. Bei dieser Methode kann dann allerdings nicht mehr über einen symbolischen Namen auf die Daten zugegriffen werden sondern es muss mit festen Adressen gearbeitet werden. Beispiel für eine Datei, die in die finale&lt;br /&gt;
Intel-HEX-Datei beim Offset 0xF000 eingefügt wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srec_cat myprog.hex -intel my_data.bin -binary -offset 0xF000 -output my_output.hex -intel -address-length=2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In C kann dann mittels eines Pointers bzw. beim AVR mitteles den pgm_read-Funktionen auf diese Daten zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned char *my_data = (unsigned char*) 0xF000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Vorteile:&lt;br /&gt;
* Keine zusätzliche Datei nötig&lt;br /&gt;
* Daten müssen zum Zeitpunkt des Linkens nicht bekannt sein (z.B. Seriennummer)&lt;br /&gt;
; Nachteile:&lt;br /&gt;
* Fixe Adresse muss verwendet werden&lt;br /&gt;
* Nicht typsicher&lt;br /&gt;
&lt;br /&gt;
== #embed ==&lt;br /&gt;
&lt;br /&gt;
C23 führt #embed ein, was benutzt werden kann um eine Datei in die C-Quelle einzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
static const char foo_c[] =&lt;br /&gt;
{&lt;br /&gt;
#embed &amp;quot;foo.c&amp;quot;&lt;br /&gt;
    // Append \0 so that foo_c becomes a proper C string&lt;br /&gt;
    // (assuming foo.c is a text file).&lt;br /&gt;
    , &#039;\0&#039;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;== foo.c has %d bytes ==\n%s\n&amp;quot;,&lt;br /&gt;
            (int) sizeof (foo_c) - 1, foo_c);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Vorteile:&lt;br /&gt;
* Einfache Handhabung&lt;br /&gt;
* Es können zusätzliche Zeichen vor oder nach der Datei eingefügt werden, und es können zum Beispiel mehrere Dateien zu einem Array zusammengefasst werden.&lt;br /&gt;
* sizeof kann verwendet werden.&lt;br /&gt;
&lt;br /&gt;
; Nachteile:&lt;br /&gt;
* Erst ab C23 verfügbar, oder falls der Compiler #embed als Erweiterung unterstützt, etwa als GNU-C.&lt;br /&gt;
* Datei muss zur Compile-Zeit bekannt sein.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:C]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107575</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107575"/>
		<updated>2025-06-27T16:20:54Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Optimierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR118012 118012] || Expensive code (mul, neg) instead of bit test&lt;br /&gt;
| &amp;lt;tt&amp;gt;-mpr118012&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107574</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107574"/>
		<updated>2025-06-27T16:16:12Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113934 113934] || Switch AVR to LRA&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107285</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107285"/>
		<updated>2025-02-13T15:10:55Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Vorbereitungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* [https://avrdudes.github.io/avr-libc/ AVR-LibC]: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html AVR-LibC: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-LibC: [https://avrdudes.github.io/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab GCC v5 muss mindestens eine AVR-LibC &amp;amp;ge; v2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine AVR-LibC vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/ Anleitung] der AVR-LibC schauen. Insbesondere die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/FAQ.html FAQ] lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der AVR-LibC wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/group__avr__interrupts.html#avr_signames Die Namen] sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der AVR-LibC-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen des avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read* oder __flash). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der AVR-LibC bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von Binutils, AVR-LibC und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107284</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107284"/>
		<updated>2025-02-13T15:07:32Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bestandteile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* [https://avrdudes.github.io/avr-libc/ AVR-LibC]: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html AVR-LibC: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/ Anleitung] der AVR-LibC schauen. Insbesondere die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/FAQ.html FAQ] lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der AVR-LibC wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/group__avr__interrupts.html#avr_signames Die Namen] sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der AVR-LibC-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen des avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read* oder __flash). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der AVR-LibC bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von Binutils, AVR-LibC und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107283</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107283"/>
		<updated>2025-02-13T15:05:44Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Tipps &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html AVR-LibC: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/ Anleitung] der AVR-LibC schauen. Insbesondere die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/FAQ.html FAQ] lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der AVR-LibC wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/group__avr__interrupts.html#avr_signames Die Namen] sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der AVR-LibC-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen des avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read* oder __flash). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der AVR-LibC bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von Binutils, AVR-LibC und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107282</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107282"/>
		<updated>2025-02-13T15:03:47Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Tipps &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html AVR-LibC: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/ Anleitung] der AVR-LibC schauen. Insbesondere die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/FAQ.html FAQ] lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der AVR-LibC wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. Die Namen sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/group__avr__interrupts.html#avr_signames AVR-LibC-Dokumenation] aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen des avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read* oder __flash). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der AVR-LibC bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von Binutils, AVR-LibC und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107281</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107281"/>
		<updated>2025-02-13T14:55:39Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: linkfix avr-libc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html AVR-LibC: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/ Anleitung] der AVR-LibC schauen. Insbesondere die [https://avrdudes.github.io/avr-libc/avr-libc-user-manual/FAQ.html FAQ] lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der avr-libc wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. Die Namen sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der avr-libc-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen der avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read*). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der avr-libc bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von binutils, avr-libc und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107280</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107280"/>
		<updated>2025-02-13T14:51:38Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Erstellen der avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[http://www.nongnu.org/avr-libc/user-manual/install_tools.html AVR-Libc: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [http://www.nongnu.org/avr-libc/user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der AVR-LibC =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [http://www.nongnu.org/avr-libc/user-manual/index.html Anleitung] der avr-libc schauen. Insbesondere die FAQ lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der avr-libc wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. Die Namen sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der avr-libc-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen der avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read*). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der avr-libc bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von binutils, avr-libc und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107279</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107279"/>
		<updated>2025-02-13T14:51:13Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Erstellen der avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[http://www.nongnu.org/avr-libc/user-manual/install_tools.html AVR-Libc: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [http://www.nongnu.org/avr-libc/user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der avr-libc =====&lt;br /&gt;
Als erstes muss die AVR-LibC zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [http://www.nongnu.org/avr-libc/user-manual/index.html Anleitung] der avr-libc schauen. Insbesondere die FAQ lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der avr-libc wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. Die Namen sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der avr-libc-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen der avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read*). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der avr-libc bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von binutils, avr-libc und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107278</id>
		<title>AVR-GCC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC&amp;diff=107278"/>
		<updated>2025-02-13T14:48:51Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bibliotheken / Libraries */ avr-libc: nongnu -&amp;gt; github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avr-gcc ist ein freier [[C]]-Cross-[[Compiler]] für [[AVR]]-[[Mikrocontroller]].&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann von der Leistungsfähigkeit kommerzieller [[Compiler]] gut mithalten. Sogar C++-Programme sind möglich; in der aktuellen Fassung wird C++ jedoch nur eingeschränkt unterstützt (Stand 3/2012).&lt;br /&gt;
&lt;br /&gt;
== Bestandteile ==&lt;br /&gt;
&lt;br /&gt;
Die Toolchain (Werkzeugsammlung) besteht aus mehreren Kommandozeilen-Programmen, die sich auf einfache Weise in einen Editor oder eine Entwicklungsumgebung einbinden lassen. Weit verbreitet ist die Verwendung von make zur Steuerung, siehe [[AVR-GCC-Tutorial/Exkurs Makefiles|AVR-GCC-Tutorial: Exkurs Makefiles]]. &lt;br /&gt;
&lt;br /&gt;
Die Bestandteile im einzelnen:&lt;br /&gt;
* Binutils: Assembler, Linker und weitere Hilfsprogramme.&lt;br /&gt;
* GCC: Der eigentliche C(++)-Compiler.&lt;br /&gt;
* AVR-Libc: Die C-Standardbibliothek mit AVR-spezifischen Headerdateien und Funktionen.&lt;br /&gt;
* [[AVRDUDE]]: universelle AVR-Programmiersoftware, kein eigentlicher Teil der Toolchain, aber oft verwendet&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Linux/Unix ===&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an.&lt;br /&gt;
&lt;br /&gt;
Wenn keine aktuelle avr-gcc-Version als Paket (Paketname ist, zumindest bei Debian, gcc-avr) für die verwendete Distribution zur Verfügung steht, dann können sich [[Unix]]/[[Linux]]-Nutzer den Sourcecode herunterladen und selbst kompilieren, dazu gibt es Schritt-für-Schritt-Anleitungen&amp;lt;ref&amp;gt;[http://www.nongnu.org/avr-libc/user-manual/install_tools.html AVR-Libc: Building and Installing under Linux, FreeBSD, and Others]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren www.roboternetz.de: avr-gcc und avrdude installieren]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das [http://www.femtoos.org FemtoOS]-Paket beinhaltet Scripte zum automatischen Herunterladen und Bauen einer avr-gcc Version 4.3.3.&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ist auch [http://cdk4avr.sf.net CDK4AVR], das die entsprechenden Tools als einfach installierbare Linux-Pakete bereitstellt. Leider ist das Projekt schon etwas älter, im Forum findet sich ein [http://www.mikrocontroller.net/topic/130972 Beitrag], aktuellere Sourcen mit den entsprechenden Patches zu versehen und zu kompilieren. Patches zu den Binutils und GCC-Sourcen sind unumgänglich, da die offiziellen Sourcen aufgrund des Umfangs an Prozessortargets den aktuellsten Entwicklungen hinterherhinken und damit bereits bekannte Fehler eventuell noch nicht behoben sind. Weitere Tipps zur AVR-Programmierung unter Linux stehen im Artikel [[AVR und Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Die beste fertige Toolchain ist das [http://www.obdev.at/crosspack/ Crosspack]. Dieses enthält auch die AVR-Libc, avrdude und avarice. Leider gab es bei Mac OS 10.5.6 eine tiefgreifende Änderung beim fork()-Systemcall, der bewirkt, dass avarice mit JTAGICE mkII und Dragon nicht funktioniert. Geräte mit Serial-USB-Konvertern (AVRISP clones etc) funktionieren dagegen problemlos. &lt;br /&gt;
&lt;br /&gt;
Wer die Toolchain von Hand bauen möchte kann das natürlich auch tun, dazu einfach den unter &amp;quot;Linux/Unix&amp;quot; verlinkten Anleitungen folgen. Unter [[Mac OS X]] muss man dazu zuerst die [http://developer.apple.com/Tools/ Apple Developer Tools] installieren.&lt;br /&gt;
&lt;br /&gt;
Teile der Toolchain (AVR-Libc und avrdude) kann folgendermaßen installieren:&lt;br /&gt;
&lt;br /&gt;
==== Mit MacPorts ====&lt;br /&gt;
Wenn man [http://www.macports.org/ MacPorts] benutzt kann man folgendes in das Terminal eingeben, um den Toolchain zu installieren:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avr-libc&lt;br /&gt;
&lt;br /&gt;
Das Programmiertool avrdude bekommt man genauso:&lt;br /&gt;
&lt;br /&gt;
 sudo port install avrdude&lt;br /&gt;
&lt;br /&gt;
==== Mit Homebrew ====&lt;br /&gt;
Mit dem neueren Tool [http://brew.sh Homebrew] funktioniert das folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
avrdude kann sofort installiert werden:&lt;br /&gt;
&lt;br /&gt;
 brew install avrdude&lt;br /&gt;
&lt;br /&gt;
Für den restlichen Toolchain muss man erst ein &#039;Tap&#039; hinzufügen:&lt;br /&gt;
&lt;br /&gt;
 brew tap osx-cross/avr&lt;br /&gt;
&lt;br /&gt;
und kann dann den eigentlichen Toolchain installieren:&lt;br /&gt;
&lt;br /&gt;
 brew install avr-libc&lt;br /&gt;
&lt;br /&gt;
Weblinks:&lt;br /&gt;
&lt;br /&gt;
* [http://tinkerlog.com/2007/09/29/programming-avr-with-a-macbook/ Programming AVR with a MacBook] (engl.)&lt;br /&gt;
* [http://www.ladyada.net/library/avrdevtut/setup-mac.html AVR Tutorial from Lady Ada] (engl.)&lt;br /&gt;
* [http://www.obdev.at/crosspack/ Crosspack]&lt;br /&gt;
* [http://www.digithink.com/OSX-AVR OSX-AVR (nicht mehr aktuell)]&lt;br /&gt;
* [http://www.definefalsetrue.com/index.php/Mac-OS-X/bootfeedx.html BootFeedX Bootloaderfrontend]&lt;br /&gt;
* [http://github.com/osx-cross/homebrew-avr/ homebrew-avr]&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Man kann sich auch für Windows den GCC selbst bauen oder man sucht von anderen erstellte Binaries.&lt;br /&gt;
&lt;br /&gt;
Atmel bietet die [http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain] in verschiedenen Versionen zum Herunterladen an. Allerdings ohne &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Der alte Klassiker [[WinAVR]] wird seit 2010 nicht mehr gepflegt und funktioniert&lt;br /&gt;
ab Windows 8 nur noch eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Firma SysProgs bietet aktuelle Versionen der [http://gnutoolchains.com GNU Toolchain]&lt;br /&gt;
einschließlich &amp;quot;make&amp;quot; für viele Systemarchitekturen zum Download an.&lt;br /&gt;
&lt;br /&gt;
==== Selbst bauen ====&lt;br /&gt;
&lt;br /&gt;
Zuerst sei einmal die offizielle (englische) Anleitung genannt: [http://www.nongnu.org/avr-libc/user-manual/install_tools.html Building and Installing avr-gcc]&lt;br /&gt;
&lt;br /&gt;
Das hier ist die etwas ausführlichere Beschreibung, die mir Johann L. gegeben hat, damit ich meinen Compiler erstellen konnte. Der Post dazu findet sich [https://www.mikrocontroller.net/topic/384825?goto=4394391#4394606 hier]. &lt;br /&gt;
&lt;br /&gt;
Zuerst einmal braucht man am besten ein Linux, zum Beispiel ein aktuelles Ubuntu. dort müssen diverse Programme wie gcc, autoconf, subversion usw. installiert sein. Wenn etwas fehlt meckert configure, das einfach aufmerksam lesen und dann die Programme nachinstallieren. Danach erneut configure aufrufen.&lt;br /&gt;
Um die Toolchain für Windows zu bauen brauchen wir noch mingw32 (aktueller Name in den meisten Paketquellen: mingw32-w64-gcc oder gcc-w64-mingw32). Eventuell findet sich das in den Paketquellen eurer Distribution, sonst kann ich auf [http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/ diese Seite] verweisen.&lt;br /&gt;
&lt;br /&gt;
===== Vorbereitungen =====&lt;br /&gt;
Wie schon gesagt brauchen wir ein Linux, zum Beispiel in einer VM. Ein minimales Linux-Hintergrundwissen wären auch gut, aber es geht notfalls (Google &amp;amp; co. sind die Freunde) auch ohne.&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Auf diesem Linux darf kein avr-gcc und keine avr-libc vorhanden sein!&lt;br /&gt;
Dazu brauchen wir die folgende Software:&lt;br /&gt;
* GNU Binutils: [https://www.sourceware.org/binutils/ Download], am besten die neueste Version (runter scrollen, aktuell ist 2.27)&lt;br /&gt;
* GCC Sourcen: [https://gcc.gnu.org/ Download], diese sollten aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/&#039;&#039;branchname&#039;&#039; gcc ,mit &#039;&#039;branchname&#039;&#039; gcc-&#039;&#039;version&#039;&#039;-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen &#039;&#039;trunk&#039;&#039; (svn co svn://gcc.gnu.org/svn/gcc/trunk).&lt;br /&gt;
* Die AVR-libc: [http://download.savannah.gnu.org/releases/avr-libc/ Download]. &#039;&#039;Achtung:&#039;&#039; Ab gcc-Version 5 muss mindestens eine avr-libc-Version &amp;gt;= 2.0.0 verwendet werden. Ältere GCCs brauchen natürlich auch eine avr-libc vor dieser Version.&lt;br /&gt;
&lt;br /&gt;
Alles herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
Zu den Downloads kommen dann noch 2 Umgebungsvariablen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ PREFIX=$HOME/local/avr&lt;br /&gt;
$ export PREFIX&lt;br /&gt;
$ PATH=$PATH:$PREFIX/bin&lt;br /&gt;
$ export PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Damit legt ihr das Installationsverzeichnis fest und fügt auch gleich das Verzeichnis für die ausführbaren Dateien zum Pfad hinzu.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gehe ich von diesem Ordner-Layout aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
|&lt;br /&gt;
+ BuildToolchain&lt;br /&gt;
   |&lt;br /&gt;
   + Downloads&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildLinux&lt;br /&gt;
   |   |&lt;br /&gt;
   |   + binutils&lt;br /&gt;
   |   + gcc&lt;br /&gt;
   |   + avr-libc&lt;br /&gt;
   |&lt;br /&gt;
   + buildWindows&lt;br /&gt;
      |&lt;br /&gt;
      + binutils&lt;br /&gt;
      + gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der Binutils =====&lt;br /&gt;
Wechselt in das Verzeichnis BuildToolchain/buildLinux/binutils.&lt;br /&gt;
Von dort aus werden wir die binutils konfigurieren und erstellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; man darf weder GCC noch die Binutils in einem Verzeichnis innerhalb des Quellordners der Downloads konfigurieren, sonst kommen wirre Fehler. Wer sich an die Anleitung hält kann diesen Fehler (fast) nicht machen.&lt;br /&gt;
&lt;br /&gt;
Also, wir sind soweit. Jetzt geht es ans Konfigurieren der binutils und danach ans kompilieren, aber das ist ganz leicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/binutils/configure --prefix=$PREFIX --target=avr --disable-nls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn configure fehlende Programme meldet: nachinstallieren und erneut versuchen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind die binutils für Linux fertig. Ihr könnt nachkontrollieren, ob die binutils da sind: Im Ordner $PREFIX/bin sollten sich die Dateien befinden, darunter avr-objcopy, avr-as, avr-size, etc.&lt;br /&gt;
&lt;br /&gt;
===== Erstellen vom GCC =====&lt;br /&gt;
Als erstes muss sich der GCC noch ein paar zusätzliche Dateien herunterladen, das geschieht automatisch mit dem Befehl (ausgeführt in BuildToolchain/Downloads/gcc):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./contrib/download_prerequisites&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/gcc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$PREFIX --target=avr \&lt;br /&gt;
    --enable-languages=c,c++,lto --disable-nls --disable-libssp --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Erstellen der avr-libc =====&lt;br /&gt;
Als erstes muss die avr-libs zum konfigurieren bereit gemacht werden:&lt;br /&gt;
Im Verzeichnis BuildToolchain/Downloads/avr-libc die Datei bootstrap ausführen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach wechselt ihr ins Verzeichnis BuildToolchain/buildLinux/avr-libc&lt;br /&gt;
Dort führt ihr das Folgende aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/avr-libc/configure --prefix=$PREFIX --build=`./config.guess` --host=avr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Testen unter Linux =====&lt;br /&gt;
So, jetzt seit ihr schon bei der Hälfte: Der Compiler läuft schon unter Linux! &lt;br /&gt;
Das testet ihr am besten schon mit ein paar einfachen LED-blink-Programmen, damit auch sichergestellt ist, dass bis hierhin alles geklappt hat.&lt;br /&gt;
Das einfachste und wichtigste Kommando dürfte sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ avr-gcc --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dort sollte die Versionsnummer der GCC stehen. Wenn eine ältere Nummer dasteht, hab ihr entweder einen alten Download bemüht, oder eine andere Version vom avr-gcc war noch installiert.&lt;br /&gt;
Wenn der Fehler kommt, dass das Programm nicht gefunden werden kann, dann befindet sich avr-gcc nicht im PATH, das bedeutet ihr habt die Umgebungsvariablen nicht richtig gesetzt (siehe oben).&lt;br /&gt;
&lt;br /&gt;
===== Bau für Windows =====&lt;br /&gt;
Ihr müsst keine neuen Dateien runter laden, lediglich die Programme nochmal etwas anders konfigurieren.&lt;br /&gt;
Die Schritte davor &#039;&#039;&#039;müssen&#039;&#039;&#039; jedoch ausgeführt werden!&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/binutils und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Download/binutils/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wobei &#039;&#039;plattform&#039;&#039; euer Ziel-System ist, also entweder i686 oder x86_64, je nach dem, was ihr für ein mingw installiert habt und ob ihr den Compiler für 32bit (i686) oder 64bit (x86_64) baut.&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildWindows/gcc und führt das Folgende aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ../../Downloads/gcc/configure --prefix=$HOME/local/avr4win --target=avr --disable-nls \&lt;br /&gt;
    --host=plattform-w64-mingw32 --build=plattform-linux-gnu --enable-languages=c,c++,lto --with-gnu-as \&lt;br /&gt;
    --with-gnu-ld --disable-shared --with-dwarf2&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wechselt ins Verzeichnis BuildToolchain/buildLinux/avr-libc und führt den folgenden Befehl aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ make install prefix=$HOME/local/avr4win&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist der Compiler auch &amp;quot;schon&amp;quot; fertig. Aber in den Binaries sind noch die gesamten Symbole enthalten, was die .exe-Dateien aufbläht. Um diese los zu werden, kann man einfach noch diesen Befehl ausführen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ find . -name &#039;*.exe&#039; -exec plattform-w64-mingw32-strip {} &#039;;&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sollten ihr im Ordner $HOME/local/avr4win die gesamte Toolchain haben. Diesen Ordner müsst ihr nur noch auf euren Windows-PC kopieren.&lt;br /&gt;
Für das klassische WinAVR fehlt noch Programmers Notepad, sowie die Utility-Programme, vor allem avrdude und make. Diese kann man entweder seperat downloaden oder aus einer WinAVR-Installation kopieren. Die Versionen davon spielen keine Rolle.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsumgebungen ==&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* [[AVR-Studio]]: ab Version 4.12 mit WinAVR-Unterstützung, integrierter Simulator, Debugger, rudimentäre Projektverwaltung&lt;br /&gt;
* Programmers-Notepad: wird bei [[WinAVR]] mitgeliefert, ein guter Editor mit einer rudimentären Projektverwaltung&lt;br /&gt;
* [http://www.myavr.info/download/benutzerhandbuch_sisy_avr.pdf SiSy-AVR]: ein CASE-Tool mit WinAVR-Unterstützung, das eine Entwicklungsumgebung bereitstellt.&lt;br /&gt;
&lt;br /&gt;
Plattformunabhängig:&lt;br /&gt;
* [http://www.eclipse.org/ Eclipse] mit CDT und dem [http://avr-eclipse.sourceforge.net/index.html AVR Eclipse Plugin]&lt;br /&gt;
* [[Code::Blocks]]: vielseitige, freie Entwicklungsumgebung für Windows und Linux&lt;br /&gt;
* [http://www.netbeans.org/ Netbeans] in der C++ - Version mit [[WinAVR]] oder [[avr-gcc]] als Toolchain&lt;br /&gt;
&lt;br /&gt;
Linux:&lt;br /&gt;
*[http://sourceforge.net/projects/kontrollerlab/?_test=b KontrollerLab] ist eine freie Entwicklungsumgebung für AVR momentan aber noch im Beta-stadium.&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken / Libraries ==&lt;br /&gt;
&lt;br /&gt;
Die [https://github.com/avrdudes/avr-libc AVR-LibC] ist die gebräuchliche &amp;quot;Laufzeitbibliothek&amp;quot; zum avr-gcc C-Compiler, welche den Zugriff auf die AVR-Hardware erheblich erleichtert. Die offizielle Dokumentation zur AVR-LibC mit vielen Hinweisen auch zum Compiler avr-gcc und verschiedener Tools (z.&amp;amp;nbsp;B. [[AVRDUDE]]) findet man [https://avrdudes.github.io/avr-libc/ hier].&lt;br /&gt;
&lt;br /&gt;
Auch die [http://www.procyonengineering.com/embedded/avr/avrlib/ Procyon AVRlib] enthält nützlichen Code z.&amp;amp;nbsp;B. für UART, LCD,.... Bei der Procyon AVRlib ist die Lizenz zu beachten (in Kurzform: man muss dritten auf Verlangen den gesamten Quellcode der Firmware zur Verfügung stellen, falls Teile der Procyon Bibliothek genutzt werden).&lt;br /&gt;
&lt;br /&gt;
Zum Zugriff auf interne Funktionen oder externe Peripherie existieren einige fertige Komponenten. Z.B. &amp;quot;Projects&amp;quot;-Bereich von [http://www.avrfreaks.net/ avrfreaks.net] (Anmeldung erforderlich (kostenlos)). &lt;br /&gt;
&lt;br /&gt;
Die Erstellung eigener Bibliotheken ist im Artikel  [[Libraries]] erklärt.&lt;br /&gt;
&lt;br /&gt;
== Tipps &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
Eine Liste mit einigen Hinweisen:&lt;br /&gt;
&lt;br /&gt;
* 07.10.11 → es kann Probleme mit der aktuellen Eclipse-Version (Indigo) und WinAVR geben. Falls ihr Indigo installiert habt und Eclipse die Definitionen wie z.B. DDRA nicht kennt, jedoch kompillieren kann, dann müsst ihr auf die Version Helios SR2 wechseln. Danach läuft alles wie gehabt!&lt;br /&gt;
&lt;br /&gt;
* Keine &amp;quot;antiken&amp;quot; Versionen verwenden. Für MS-Windows-Nutzer: aktuelles WinAVR installieren. Für Linux/Unix-Nutzer: letzte stabile Version selbst kompilieren oder aus &amp;quot;Distribution-Packages&amp;quot; installieren (z.&amp;amp;nbsp;B. [http://cdk4avr.sourceforge.net/ cdk4avr]).&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen zuerst in die [http://www.nongnu.org/avr-libc/user-manual/index.html Anleitung] der avr-libc schauen. Insbesondere die FAQ lesen.&lt;br /&gt;
&lt;br /&gt;
* Sicherstellen, dass der MCU-Parameter (zum Compiler/Linker, meist im Makefile defniert) mit dem Zielprozessor übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
* [[AVR-GCC-Tutorial]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Im Zweifel nicht INTERRUPT(...) sondern SIGNAL(...) nutzen. In neueren Versionen der avr-libc wurde &amp;quot;ISR&amp;quot; als Ersatz für SIGNAL eingeführt und sollte genutzt werden (SIGNAL und INTERRUPT werden langfristig entfallen). Darauf achten, dass die Vektor- bzw. Signal-Namen (&amp;quot;Parameter&amp;quot;) zu ISR bzw. SIGNAL (und INTERRUPT wenn denn unbedingt erforderlich) richtig geschrieben sind. Die Namen sind in der in der entsprechenden Header-Datei (ioxxx.h) für den Controller und der avr-libc-Dokumenation aufgelistet. Im Zweifel den erzeugten Interrupt-Vektor im Assembler-Listing prüfen, es darf &#039;&#039;&#039;kein&#039;&#039;&#039; SIG_&#039;&#039;xxx&#039;&#039; oder xxx_vect mehr zu sehen sein, sondern _vector_&#039;&#039;N&#039;&#039; (wobei &#039;&#039;N&#039;&#039; eine Zahl ist). Neuere Versionen der avr-gcc zeigen eine Warnung, falls etwas falsch geschrieben wurde, ältere Versionen nicht.&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Daten(-Tabellen) im Programmspeicher (Flash) erfolgt über Program-Space-Funktionen (pgm_read*). Lediglich die Definition einer Variablen/eines Feldes mit dem PROGMEM Attribut zu versehen, reicht (im Gegensatz zu Codevision, IAR, Imagecraft) nicht aus.&lt;br /&gt;
&lt;br /&gt;
* Nicht alle AVRs werden vollständig von der avr-libc bzw. dem Compiler unterstützt. Bei Problemen hilft oft ein Blick in den erzeugten Assembler-Code. Die Anzahl der unterstützen Controller steigt jedoch mit Version zu Version von binutils, avr-libc und avrdude. Evtl. reicht einfach ein Update auf neuere Software-Versionen (z.&amp;amp;nbsp;B. im jeweils aktuellen WinAVR-Packet).&lt;br /&gt;
&lt;br /&gt;
* inp(), outp(), sbi() und cbi() werden in der aktuellen Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle Header-Datei einbinden(deprecated.h). Es wird schon seit längerem empfohlen, diese Makros nicht mehr zu nutzen. Einige Anleitungen sind in diesem Punkt veraltet. Mit halbwegs aktuellen avr-gcc/avr-libc-Versionen kann einfach z.&amp;amp;nbsp;B. DDRB=0xfe bzw. foo=PINB geschrieben werden.  Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &amp;amp;= ~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es umschalten (_BV(x) entspricht dabei (1&amp;lt;&amp;lt;x)). Die ersten beiden Varianten erzeugen bei eingeschalteter Optimierung und passenden Parametern (wie hier im Beispiel Register im &amp;quot;unteren&amp;quot; Speicherbereich) die SBI bzw. CBI Prozessorbefehle.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-nm erhält man eine Übersicht über die Platzausnutzung in der erzeugten ELF-Datei bzw. dem damit gefüllten AVR. Das Tool wird per Kommandozeile mit &lt;br /&gt;
::&amp;lt;pre&amp;gt;avr-nm --size-sort --print-size -r -td &amp;lt;your_ELF_file&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
:aufgerufen und gibt eine vierspaltige Liste aus: Die erste Spalte ist die Adresse, die zweite die benötigte Größe, die dritte der Typ und die vierte der Name des Symbols. Alle Symbole vom Typ &amp;quot;T&amp;quot; (globale Funktionen), &amp;quot;t&amp;quot; (lokale Funktionen) und letztlich auch die mit einem &amp;quot;D&amp;quot; oder &amp;quot;d&amp;quot; (globale bzw. lokale Daten mit Initialisierungswerten im ROM) betreffen das FLASH-ROM. Typen &amp;quot;B&amp;quot; und &amp;quot;b&amp;quot; brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert). (vgl. [http://www.mikrocontroller.net/topic/59960#467920 Forenbeitrag] von Jörg Wunsch)&lt;br /&gt;
&lt;br /&gt;
* Mit dem Tool avr-size erhält man eine Übersicht über den Platzbedarf in den text, data und bss Sektionen innerhalb der ELF Binärdatei. Die Sektionen text und data benötigen Platz im FLASH-ROM und die Sektionen data und bss benötigen zur Laufzeit Platz im SRAM.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [[AVR-GCC-Codeoptimierung]]&lt;br /&gt;
* [[GCC: unbenutzte Funktionen entfernen]]&lt;br /&gt;
* [http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna AVR-GCC Interna]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://winavr.sourceforge.net/install_config_WinAVR.pdf Tutorial von C. O&#039;Flynn und E. Weddington] Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch)&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml AVR-GCC und Linux]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-2-1.html GCC-Forum auf mikrocontroller.net]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Kategorie:avr-gcc| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107165</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107165"/>
		<updated>2024-11-19T20:43:56Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107164</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107164"/>
		<updated>2024-11-19T20:42:52Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107163</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107163"/>
		<updated>2024-11-19T20:39:56Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Optimierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107162</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107162"/>
		<updated>2024-11-19T17:39:33Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Optimierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107161</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107161"/>
		<updated>2024-11-19T15:02:03Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| 14.2, 13.4, 12.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| 10.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=107102</id>
		<title>AVR-Simulation</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Simulation&amp;diff=107102"/>
		<updated>2024-10-02T16:39:29Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* AVRtest */ Link nach GitHub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:AVR]]&lt;br /&gt;
== SimulAVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/simulavr/ SimulAVR] ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im [[WinAVR]]-Paket enthalten (/WinAVR/bin/simulavr.exe).&lt;br /&gt;
&lt;br /&gt;
Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine [http://reprap.org/wiki/SimulAVR#Signal_tracing SimulAVR Anleitung], die eine gute Passage dazu enthält.&lt;br /&gt;
&lt;br /&gt;
Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden. &lt;br /&gt;
&lt;br /&gt;
Wer &amp;quot;textorientiertes&amp;quot; Debugging mag, oder beispielsweise &#039;&#039;emacs&#039;&#039; als Frontend verwenden möchte, der nutzt den [[GDB]], den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet). &lt;br /&gt;
&lt;br /&gt;
Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/[[JTAG]]-Debugger wie z.&amp;amp;nbsp;B. [http://avarice.sourceforge.net/ AVaRICE] als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.&lt;br /&gt;
&lt;br /&gt;
=== Starten von SimulAVR ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:SimulAVR-Display.png|right|220px]]&lt;br /&gt;
Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung.&lt;br /&gt;
Das &#039;&#039;Backend&#039;&#039; der Simulation ist nun Einsatzbereit.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).&lt;br /&gt;
&lt;br /&gt;
 $ simulavr -g -P simulavr-disp -d &amp;lt;AVR-Prozessortyp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ simulavr --help&lt;br /&gt;
&lt;br /&gt;
=== Starten des GDB ===&lt;br /&gt;
&lt;br /&gt;
Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb&lt;br /&gt;
&lt;br /&gt;
Der GDB meldet sich mit folgendem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current directory is c:/WinAVR/testprj4/&lt;br /&gt;
GNU gdb 6.1&lt;br /&gt;
Copyright 2004 Free Software Foundation, Inc.&lt;br /&gt;
GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
Type &amp;quot;show copying&amp;quot; to see the conditions.&lt;br /&gt;
There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.&lt;br /&gt;
This GDB was configured as &amp;quot;--host=i686-pc-cygwin --target=avr&amp;quot;.&lt;br /&gt;
(gdb) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(gdb)&#039;&#039;&#039; ist der Prompt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
 $ avr-gdb -tui&lt;br /&gt;
&lt;br /&gt;
Beim (gdb) prompt dann das Layout auf Assembler umschalten.,&lt;br /&gt;
&lt;br /&gt;
 (gdb) layout asm&lt;br /&gt;
&lt;br /&gt;
=== Simulieren/Debuggen ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem &#039;&#039;Makefile&#039;&#039; erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.&lt;br /&gt;
&lt;br /&gt;
 (gdb) file main.elf &lt;br /&gt;
 Reading symbols from main.elf...done.&lt;br /&gt;
&lt;br /&gt;
Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:&lt;br /&gt;
&lt;br /&gt;
 (gdb) target remote localhost:1212&lt;br /&gt;
&lt;br /&gt;
oder kürzer:&lt;br /&gt;
&lt;br /&gt;
 (gdb) targ rem :1212&lt;br /&gt;
 Remote debugging using :1212&lt;br /&gt;
 0x00000000 in __vectors ()&lt;br /&gt;
&lt;br /&gt;
Jetzt muss das Programm in den Simulator geladen werden:&lt;br /&gt;
&lt;br /&gt;
 (gdb) load&lt;br /&gt;
 Loading section .data, size 0x32 lma 0x1bc&lt;br /&gt;
 Loading section .text, size 0x1bc lma 0x0&lt;br /&gt;
 Start address 0x0, load size 494&lt;br /&gt;
 Transfer rate: 3952 bits in &amp;lt;1 sec, 30 bytes/write.&lt;br /&gt;
&lt;br /&gt;
Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, können sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter &amp;quot;-x&amp;quot; (eXecute) mitgegeben:&lt;br /&gt;
&lt;br /&gt;
avr-gdb -x gdb.conf&lt;br /&gt;
&lt;br /&gt;
Alternativ zu dem remote-debugging kann auch der avr-gdb-interne Simulator benutzt werden. Dieser wird mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 target sim&amp;lt;br /&amp;gt;&lt;br /&gt;
gestartet.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man &#039;&#039;breakpoints&#039;&#039; setzen.&lt;br /&gt;
Den Ersten am besten bei &#039;&#039;main&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) b main&lt;br /&gt;
 Breakpoint 1 at 0xd2: file main.c, line 16.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man das Programm im Simulator mit &#039;&#039;continue&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
 (gdb) c&lt;br /&gt;
 Continuing.&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des zuvor gesetzten &#039;&#039;breakpoints&#039;&#039; stoppt GDB und meldet:&lt;br /&gt;
&lt;br /&gt;
 Breakpoint 1, main () at main.c:16&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von &#039;&#039;&#039;help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Data Display Debugger ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:ddd_c.png|right|200px]]&lt;br /&gt;
Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm &amp;quot;ddd&amp;quot; (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger&lt;br /&gt;
&lt;br /&gt;
Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll. Falls das Startscript, wie oben genutzt werden soll z.B.:&lt;br /&gt;
&lt;br /&gt;
ddd --debugger &amp;quot;avr-gdb -x gdb.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ddd_asm.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
[TODO] Einige häufige GDB-Commands als Beispiel einfügen.&lt;br /&gt;
&lt;br /&gt;
== VMLab ==&lt;br /&gt;
&lt;br /&gt;
[http://www.amctools.com/vmlab.htm VMLab] ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit [[WinAVR]] zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/24494#714662 VMLAB Bug bei Stackpointer/Interrupt?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/85212#716727 Workaround]&lt;br /&gt;
&lt;br /&gt;
== AVR Studio ==&lt;br /&gt;
&lt;br /&gt;
[[Bild: AVR-Studio_Simulation.png|thumb|right|250px|Simulator-Ansicht in AVR Studio]]&lt;br /&gt;
[[AVR-Studio|AVR Studio]] von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag [http://ece353.ecs.umass.edu/lab2/labc-lectureslides2012.pptx AVR Studio: The comprehensive tutorial] (MS PowerPoint &#039;&#039;2007&#039;&#039;) von Jeremy Gummeson und Brendan Kemp.&lt;br /&gt;
&lt;br /&gt;
Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ausführliche Anleitung zum Ablauf einer Simulation:  [http://www2.tech.purdue.edu/ecet/courses/ecet309/Reference_Materials/Simulation_AVR_Studio_4.pdf Tutorial der Purdue University] (engl., PDF) (link tot!)&lt;br /&gt;
&lt;br /&gt;
Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden. &lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher  Vorteile wie Unterstützung von [[I2C|TWI]] bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:&lt;br /&gt;
:AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli&lt;br /&gt;
&lt;br /&gt;
=== HAPSIM ===&lt;br /&gt;
&lt;br /&gt;
[http://www.helmix.at/hapsim/index.htm HAPSIM] (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, [[LED]], [[LCD]] und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im [http://www.mikrocontroller.net/topic/118668 Forum]. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender [http://members.aon.at/helmi/hapsim.htm Direktlink] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Stimuli ===&lt;br /&gt;
&lt;br /&gt;
Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem &amp;quot;AVR Studio: The comprehensive tutorial&amp;quot; und bei Atmel ([http://support.atmel.com/bin/customer.exe?=&amp;amp;action=viewKbEntry&amp;amp;id=46 What is the format of the AVR Studio simulator stimuli files?]). Der [http://www.hot.ee/nppcsoftware/ Stimuli Generator for AVR Studio] ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist [https://github.com/althebaker43/avr_lcd/blob/8b177cc492d2e9a814bd21671c2267a6d3044811/atmel_studio/avr_lcd/stim2vcd.py hier] verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== LogAnalyser ===&lt;br /&gt;
&lt;br /&gt;
[http://www.dresco.co.uk/LogAnalyser/ LogAnalyser] v1.00 (c) 2008 Jon Escombe is a graphical &amp;quot;logic analyser&amp;quot; style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.&lt;br /&gt;
&lt;br /&gt;
=== TCPSimDBG ===&lt;br /&gt;
&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=74350 TCPSimDBG] ist ein Plugin für [[AVR-Studio]] um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)&lt;br /&gt;
&lt;br /&gt;
=== AVR Logic Analyzer ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coynetechsystems.com/avrlogicanalyzer/index.php AVR Logic Analyzer] von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports.&lt;br /&gt;
(kommerziell)&lt;br /&gt;
&lt;br /&gt;
== Avrora ==&lt;br /&gt;
[http://avrora.sourceforge.net/ Avrora], a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.&lt;br /&gt;
&lt;br /&gt;
== Proteus VSM for Atmel AVR ==&lt;br /&gt;
&lt;br /&gt;
[http://www.labcenter-electronics.com/products/avr.cfm Proteus VSM for Atmel AVR] ist ein kommerzieller AVR Simulator. &lt;br /&gt;
&lt;br /&gt;
In der Codesammlung gibt es dafür ein [http://www.mikrocontroller.net/topic/118974#1072449 Virtuelles AVR Funk Pollin Simulationsmodell] von Daniel Cagara.&lt;br /&gt;
&lt;br /&gt;
== CrossWorks for AVR == &lt;br /&gt;
&lt;br /&gt;
[http://rowley.co.uk/avr/index.htm CrossWorks for AVR] besitzt einen &#039;&#039;core simulator&#039;&#039; für AVRs. (Windows, Mac OS X, Linux, Solaris)&lt;br /&gt;
&lt;br /&gt;
== simavr ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/buserror/simavr simavr] Das ist ein AVR simulator von Michel &amp;quot;buserror&amp;quot; Pollet für Linux, oder andere Platformen welche avr-gcc unterstützen. &lt;br /&gt;
&lt;br /&gt;
In simavr schon implementiert:&lt;br /&gt;
    eeprom&lt;br /&gt;
    watchdog&lt;br /&gt;
    IO ports&lt;br /&gt;
    Timers, 8 &amp;amp;16&lt;br /&gt;
    The UART, including tx &amp;amp; rx interrupts&lt;br /&gt;
    SPI, master/slave including the interrupt&lt;br /&gt;
    i2c Master &amp;amp; Slave&lt;br /&gt;
    External Interrupts, INT0 and so on.&lt;br /&gt;
    ADC&lt;br /&gt;
    Self-programming&lt;br /&gt;
&lt;br /&gt;
==== Benutzung GDB (unter ubuntu getestet)&amp;lt;br /&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Öffnen 2 Terminals in simavr Ordner. Dann laden simavr in erstem Terminal mit einem embedded software (z.B. atmega1280_i2ctest):&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;$ ./simavr/run_avr examples/board_i2ctest/atmega1280_i2ctest.axf -g&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
Antwort:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Loaded 2478 .text at address 0x0&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Loaded 56 .data&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;avr_gdb_init listening on port 1234&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im zweiten Terminal starten avr-gdb:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;$ avr-gdb -tui&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir unsere software laden:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(gdb) file examples/board_i2ctest/atmega1280_i2ctest.axf&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
Antwort:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Reading symbols from examples/board_i2ctest/atmega1280_i2ctest.axf...done.&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
Danach eine Verbindung zwischen simavr und gdb aufbauen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(gdb) target remote localhost:1234&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
Antwort:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Remote debugging using localhost:1234&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;0x00000000 in __vectors ()&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und wuala - wir sind schon bei Debugging:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Breakpoint setzen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(gdb) b 140&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
Antwort:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Breakpoint 1 at 0x234: file atmega1280_i2ctest.c, line 140.&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
2. Programm starten:&amp;lt;br /&amp;gt;&lt;br /&gt;
(&amp;lt;small&amp;gt;gdb) c&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
3. GDB haltet in der gewunschte Stelle&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Zum nächsten Schrit gehen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(gdb) s&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
5. Oder zum Nachbohren:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(gdb) n&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lizenz: GPL v3&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=86665 Diskussion bei avrfreaks.net]&lt;br /&gt;
&lt;br /&gt;
== AVRtest ==&lt;br /&gt;
&lt;br /&gt;
AVRtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle &amp;quot;Syscalls&amp;quot; können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so dass ein Programm wie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
    printf (&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
AVRtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
* Lizenz: GPL v2 oder höher&lt;br /&gt;
* Betriebssysteme: Windows, Linux, etc.&lt;br /&gt;
&lt;br /&gt;
=== Weblinks ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/sprintersb/atest?tab=readme-ov-file#what-is-avrtest AVRtest: Projekt auf GitHib]&lt;br /&gt;
* [http://sourceforge.net/p/winavr/code/HEAD/tree/trunk/avrtest/ AVRtest: Projekt und README bei sourceforge (alt)]&lt;br /&gt;
* [http://lists.gnu.org/archive/html/avr-gcc-list/2011-06/msg00015.html Beschreibung in der avr-gcc-list Mailingliste (en)]&lt;br /&gt;
&lt;br /&gt;
== BASCOM AVR ==&lt;br /&gt;
&lt;br /&gt;
In [http://www.mcselec.com/ BASCOM AVR] ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender [[Basic|BASIC]] [[Compiler]] für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.&lt;br /&gt;
&lt;br /&gt;
== AVR Simulator IDE ==&lt;br /&gt;
&lt;br /&gt;
[http://oshonsoft.com/avr.html AVR Simulator IDE] from oshonsoft.com is a powerful application that supplies AVR developers with user-friendly graphical development environment for Windows with integrated simulator (emulator), Basic compiler, assembler, disassembler and debugger. (Kommerziell, Testversion verfügbar)&lt;br /&gt;
&lt;br /&gt;
== MacSim - AVR simulator for OS X ==&lt;br /&gt;
[http://www.fracturedsoftware.com/macsimavr/ MacSim Alpha 4]&lt;br /&gt;
&lt;br /&gt;
Einschränkungen u.A.:  &amp;quot;There are currently no timers, interrupts, or EEPROM. The processor is &#039;generic&#039; and has fixed size data and instruction memories.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107053</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=107053"/>
		<updated>2024-08-07T17:58:45Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106937</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106937"/>
		<updated>2024-06-17T17:37:42Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
| 14.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106936</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106936"/>
		<updated>2024-06-17T17:36:54Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106935</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106935"/>
		<updated>2024-06-17T17:35:52Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Optimierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114243 114243] || -fsplit-wide-types bloats code by more than 50% &lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106932</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106932"/>
		<updated>2024-06-14T16:22:18Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114208 114208] || DSE deletes a store that&#039;s not dead&lt;br /&gt;
| rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106894</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106894"/>
		<updated>2024-05-23T09:17:54Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106893</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106893"/>
		<updated>2024-05-23T09:17:20Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31704 31704] || Support &amp;lt;tt&amp;gt;avr-objdump -P avr-deviceinfo&amp;lt;/tt&amp;gt;&lt;br /&gt;
| v2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of &amp;lt;tt&amp;gt;avr-objdump -P mem-usage&amp;lt;/tt&amp;gt; missing .rodata &lt;br /&gt;
| v2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106892</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106892"/>
		<updated>2024-05-23T09:14:25Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of avr-objdump -P mem-usage missing .rodata &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| 14.2, 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106863</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106863"/>
		<updated>2024-04-30T16:49:55Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31687 31687] || Output of avr-objdump -P mem-usage missing .rodata &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106751</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106751"/>
		<updated>2024-04-12T11:52:17Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106690</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106690"/>
		<updated>2024-03-01T09:13:17Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR114100 114100] || Better indirect addressing on reduced Tiny&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106638</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106638"/>
		<updated>2024-02-15T13:53:20Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113927 113927] || [avr-tiny] Sets up a stack-frame even for trivial code&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106635</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106635"/>
		<updated>2024-02-12T17:11:35Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106634</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106634"/>
		<updated>2024-02-12T16:43:26Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106620</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106620"/>
		<updated>2024-02-08T11:58:15Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || ATA5795 in wrong multilib set&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113824 113824] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106601</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106601"/>
		<updated>2024-02-01T17:55:26Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31321 31321] || Remove PROVIDE from definition of symbol __flmap_init_label&lt;br /&gt;
| 2.43&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31177 31177] || Use __TEXT_REGION_ORIGIN__ as start for MEMORY region text&lt;br /&gt;
| 2.42&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106588</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106588"/>
		<updated>2024-01-29T15:38:56Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28 rodata-in-flash&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106567</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106567"/>
		<updated>2024-01-18T09:49:38Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in Flash for Devices with FLMAP&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106557</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106557"/>
		<updated>2024-01-16T12:24:52Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR113156 113156] || avr build broken: ICE: &#039;global_options&#039; are modified in local context&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106556</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106556"/>
		<updated>2024-01-16T08:23:01Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106555</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106555"/>
		<updated>2024-01-16T08:21:06Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| 13.3, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial&amp;diff=106550</id>
		<title>AVR-GCC-Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-GCC-Tutorial&amp;diff=106550"/>
		<updated>2024-01-11T08:57:35Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Flash mit __flash und Embedded-C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Tutorial soll den Einstieg in die Programmierung von Atmel [[AVR]]-Mikrocontrollern in der Programmiersprache [[C]] mit dem freien C-Compiler [[avr-gcc]] aus der [http://gcc.gnu.org/ GNU Compiler Collection] (GCC) erleichtern.&lt;br /&gt;
&lt;br /&gt;
Vorausgesetzt werden Grundkenntnisse der Programmiersprache C. Diese Kenntnisse kann man sich online erarbeiten, z. B. mit dem [http://www.schellong.de/c.htm C Tutorial von Helmut Schellong] ([[C|Liste von C-Tutorials]]). Nicht erforderlich sind Vorkenntnisse in der Programmierung von Mikrocontrollern.&lt;br /&gt;
&lt;br /&gt;
= Vorwort =&lt;br /&gt;
&lt;br /&gt;
In diesem Text wird häufig auf die Standardbibliothek avr-libc verwiesen, für die es eine [http://www.nongnu.org/avr-libc/user-manual/index.html Online-Dokumentation] gibt, in der sich auch viele nützliche Informationen zum Compiler und zur Programmierung von AVR-Controllern finden. Beim Paket [[WinAVR]] gehört die avr-libc Dokumentation zum Lieferumfang und wird mitinstalliert.&lt;br /&gt;
&lt;br /&gt;
Der Compiler und die Standardbibliothek avr-libc werden ständig weiterentwickelt. Einige Unterschiede, die sich im Verlauf der Entwicklung ergeben haben, werden hier und im Artikel [[AVR-GCC-Tutorial/Alte Quellen|Alte Quellen]] zwar angesprochen, Anfängern und Umsteigern sei jedoch empfohlen, eine aktuelle Versionen zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Das ursprüngliche Tutorial stammt von Christian Schifferle, viele neue Abschnitte und aktuelle Anpassungen von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
Dieses Tutorial ist in [[Media:AVR-GCC-Tutorial.pdf|PDF-Form]] erhältlich (zur Zeit nur eine sehr veraltete Version).&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Kapitel ==&lt;br /&gt;
&lt;br /&gt;
Um dieses riesige Tutorial etwas überschaubarer zu gestalten, wurden einige Kapitel ausgelagert, die nicht unmittelbar mit den Grundlagen von avr-gcc in Verbindung stehen. All diese Seiten gehören zur [[:Kategorie:avr-gcc Tutorial]].&lt;br /&gt;
&lt;br /&gt;
;UART: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Der UART|Der UART]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;ADC: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Analoge Ein- und Ausgabe|Analoge Ein- und Ausgabe (ADC)]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Timer: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Die Timer und Zähler des AVR|Die Timer und Zähler des AVR]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;LCD: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/LCD-Ansteuerung|LCD-Ansteuerung]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Watchdog: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Der Watchdog|Der Watchdog]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Assembler: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Assembler und Inline-Assembler|Assembler und Inline-Assembler]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;alte Quellen anpassen: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Alte Quellen|Alte Quellen anpassen]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Makefiles: → Hauptartikel: &#039;&#039;[[AVR-GCC-Tutorial/Exkurs Makefiles|Exkurs Makefiles]]&#039;&#039; sowie als Alternative für sehr kleine Projekte → Hauptartikel: &#039;&#039;[[C ohne Makefile]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Benötigte Werkzeuge =&lt;br /&gt;
&lt;br /&gt;
Um eigene Programme für AVRs mittels einer AVR-Toolchain zu erstellen wird folgende Hard- und Software benötigt:&lt;br /&gt;
&lt;br /&gt;
* Eine AVR-Toolchain bestehend aus avr-gcc, den avr-Binutils (Assembler, Linker, etc) und einer Standard-C Bibliothek.  Üblich ist die AVR-LibC, die auch quasi in allen avr-gcc Distributionen enthalten ist.&lt;br /&gt;
&lt;br /&gt;
Hardware wird keine benötigt – bis auf einen PC natürlich, auf dem der Compiler ablaufen kann.  Selbst ohne AVR-Hardware kann man also bereits C-Programme für AVRs schreiben, compiliern und sich das Look-and-Feel von avr-gcc sowie von IDEs wie [[Atmel Studio]], Eclipse oder leichtgewichtigeren Entwicklungsumbgebungen anschauen. Selbst das Debuggen und Simulieren ist mithilfe entsprechender Tools wie Debugger und Simulator in gewissen Grenzen möglich.&lt;br /&gt;
&lt;br /&gt;
Um Programme für AVRs mittels einer AVR-Toolchain zu testen, wird folgende Hard- und Software benötigt:&lt;br /&gt;
&lt;br /&gt;
* Platine oder Versuchsaufbau für die Aufnahme eines AVR-Controllers, der vom avr-gcc Compiler unterstützt wird.&amp;lt;ref&amp;gt;Für eine Liste der unterstützten COntroller siehe die Dokumentation des Compilers oder [http://www.nongnu.org/avr-libc/user-manual/index.html#supported_devices AVR-Libc: Supported Devices].&amp;lt;/ref&amp;gt; Dieses Testboard kann durchaus auch selbst gelötet oder auf einem Steckbrett aufgebaut werden. Einige Registerbeschreibungen dieses Tutorials beziehen sich auf den inzwischen veralteten AT90S2313. Der weitaus größte Teil des Textes ist aber für alle Controller der AVR-Familie gültig. &lt;br /&gt;
&lt;br /&gt;
:Brauchbare Testplattformen sind auch das [[STK500]] und der [[AVR Butterfly]] von Atmel. Weitere Infos findet man in den Artikeln [[AVR#Starterkits|AVR Starterkits]] und [[AVR-Tutorial: Equipment]].&lt;br /&gt;
&lt;br /&gt;
* Programmiersoftware und -[[AVR In System Programmer |hardware]] z. B. PonyProg (siehe auch: [[Pony-Prog Tutorial]]) oder [[AVRDUDE]] mit [[STK200]]-Dongle oder die von Atmel verfügbare Hard- und Software ([[STK500]], Atmel AVRISP, [[AVR-Studio]]).&lt;br /&gt;
&lt;br /&gt;
* Nicht unbedingt erforderlich, aber zur Simulation und zum Debuggen unter MS-Windows recht nützlich: [[AVR-Studio]].&lt;br /&gt;
&lt;br /&gt;
* Wer unter Windows und Linux gleichermassen entwickeln will, der sollte sich die [http://www.eclipse.org/ IDE Eclipse for C/C++ Developers] und das [http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR-Eclipse Plugin] ansehen. Beide sind unter Windows und Linux einfach zu installieren, siehe auch [[AVR Eclipse]]. Ebenfalls unter Linux und Windows verfügbar ist die Entwicklungsumgebung [http://www.codeblocks.org/ Code::Blocks]&amp;lt;ref&amp;gt;Aktuelle, stabile Versionen sind als Nightly Builds regelmäßig im [http://forums.codeblocks.org/ Forum] verfügbar.&amp;lt;/ref&amp;gt;. Innerhalb dieser Entwicklungsumgebung können ohne die Installation zusätzlicher Plugins &amp;quot;AVR-Projekte&amp;quot; angelegt werden. Für Linux gibt es auch noch das [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=25220 KontrollerLab].&lt;br /&gt;
&lt;br /&gt;
= Was tun, wenn&#039;s nicht klappt? =&lt;br /&gt;
&lt;br /&gt;
* Herausfinden, ob es tatsächlich ein avr(-gcc) spezifisches Problem ist oder nur die eigenen C-Kenntnisse einer Auffrischung bedürfen. Allgemeine C-Fragen kann man eventuell &amp;quot;beim freundlichen Programmierer zwei Büro-, Zimmer- oder Haustüren weiter&amp;quot; loswerden. Ansonsten: [[C]]-Buch (gibt&#039;s auch &amp;quot;gratis&amp;quot; online) lesen.&lt;br /&gt;
&lt;br /&gt;
* Die [[AVR Checkliste]] durcharbeiten.&lt;br /&gt;
&lt;br /&gt;
* Die &#039;&#039;&#039;[http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc]&#039;&#039;&#039; lesen, vor allem (aber nicht nur) den Abschnitt Related Pages/&#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039; = Oft gestellte Fragen (und Antworten dazu). Z.Zt leider nur in englischer Sprache verfügbar.&lt;br /&gt;
&lt;br /&gt;
* Den Artikel [[AVR-GCC]] in diesem Wiki lesen.&lt;br /&gt;
&lt;br /&gt;
* Das [http://www.mikrocontroller.net/forum/gcc GCC-Forum auf  www.mikrocontroller.net] nach vergleichbaren Problemen absuchen.&lt;br /&gt;
&lt;br /&gt;
* Das avr-gcc-Forum bei [http://www.avrfreaks.net AVRfreaks] nach vergleichbaren Problemen absuchen.&lt;br /&gt;
&lt;br /&gt;
* Das [http://lists.gnu.org/archive/html/avr-gcc-list/ Archiv der avr-gcc Mailing-Liste] nach vergleichbaren Problemen absuchen.&lt;br /&gt;
&lt;br /&gt;
* Nach Beispielcode suchen. Vor allem im &#039;&#039;Projects&#039;&#039;-Bereich von [http://www.avrfreaks.net AVRfreaks] (anmelden).&lt;br /&gt;
&lt;br /&gt;
* Google oder yahoo befragen schadet nie.&lt;br /&gt;
&lt;br /&gt;
* Bei Problemen mit der Ansteuerung interner AVR-Funktionen mit C-Code: das Datenblatt des Controllers lesen (ganz und am Besten zweimal). Datenblätter sind  auf den [http://www.atmel.com Atmel Webseiten] als pdf-Dateien verfügbar. Das komplette Datenblatt (complete) und nicht die Kurzfassung (summary) verwenden.&lt;br /&gt;
&lt;br /&gt;
* Die Beispielprogramme im [[AVR-Tutorial]] sind zwar in AVR-Assembler verfasst, Erläuterungen und Vorgehensweisen sind aber auch auf C-Programme übertragbar.&lt;br /&gt;
&lt;br /&gt;
* Einen Beitrag in eines der Foren oder eine Mail an die Mailing-Liste schreiben. Dabei möglichst viel Information geben: Controller, Compilerversion, genutzte Bibliotheken, Ausschnitte aus dem Quellcode oder besser ein [http://www.mikrocontroller.net/topic/72767#598986 Testprojekt] mit allen notwendigen Dateien, um das Problem nachzuvollziehen, sowie genaue Fehlermeldungen bzw. Beschreibung des Fehlverhaltens. Bei Ansteuerung externer Geräte die Beschaltung beschreiben oder skizzieren (z. B. mit [http://www.tech-chat.de/ Andys ASCII Circuit]). Siehe dazu auch: &#039;&#039;&#039;[http://www.tty1.net/smart-questions_de.html &amp;quot;Wie man Fragen richtig stellt&amp;quot;]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Erzeugen von Maschinencode =&lt;br /&gt;
&lt;br /&gt;
Aus dem C-Quellcode erzeugt der avr-gcc Compiler (zusammen mit Hilfsprogrammen wie z.&amp;amp;nbsp;B. Präprozessor, Assembler und Linker) Maschinencode für den AVR-Controller. Üblicherweise liegt dieser Code dann im Intel Hex-Format vor (&amp;quot;Hex-Datei&amp;quot;). Die Programmiersoftware (z.&amp;amp;nbsp;B. [[AVRDUDE]], PonyProg oder AVRStudio/STK500-plugin) liest diese Datei ein und überträgt die enthaltene Information (den Maschinencode) in den Speicher des Controllers. Im Prinzip sind also &amp;quot;nur&amp;quot; der avr-gcc-Compiler (und wenige Hilfsprogramme) mit den &amp;quot;richtigen&amp;quot; Optionen aufzurufen, um aus C-Code eine &amp;quot;Hex-Datei&amp;quot; zu erzeugen. Grundsätzlich stehen dazu drei verschiedene Ansätze zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
* Die Verwendung einer integrierten Entwicklungsumgebung (IDE = &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;D&#039;&#039;&#039;evelopment &#039;&#039;&#039;E&#039;&#039;&#039;nvironment), bei der alle Einstellungen z.&amp;amp;nbsp;B. in Dialogboxen durchgeführt werden können. Unter Anderem kann AVRStudio ab Version 4.12 (kostenlos auf [http://www.atmel.com/ atmel.com]) zusammen mit WinAVR als integrierte Entwicklungsumgebung für den Compiler avr-gcc genutzt werden (dazu müssen AVRStudio und WinAVR auf dem Rechner installiert sein). Weitere IDEs (ohne Anspruch auf Vollständigkeit): [http://www.eclipse.org/ Eclipse for C/C++ Developers] (d.h. inkl. CDT) und das [http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_Eclipse_Plugin AVR-Eclipse Plugin] (für diverse Plattformen, u.a. Linux und MS Windows, IDE und Plugin kostenlos), [http://sourceforge.net/projects/kontrollerlab KontrollerLab] (Linux/KDE, kostenlos). [http://www.atmanecl.com/EnglishSite/SoftwareEnglish.htm AtmanAvr] (MS Windows, relativ günstig), KamAVR (MS-Windows, kostenlos, wird augenscheinlich nicht mehr weiterentwickelt), [http://www.amctools.com/vmlab.htm VMLab] (MS Windows, ab Version 3.12 ebenfalls kostenlos). Integrierte Entwicklungsumgebungen unterscheiden sich stark in Ihrer Bedienung und stehen auch nicht für alle Plattformen zur Verfügung, auf denen der Compiler  ausführbar ist (z.&amp;amp;nbsp;B. AVRStudio nur für MS-Windows). Zur Anwendung des avr-gcc Compilers mit IDEs sei hier auf deren Dokumentation verwiesen. &lt;br /&gt;
&lt;br /&gt;
* Die Nutzung des Programms make mit passenden Makefiles. In den folgenden Abschnitten wird die Generierung von Maschinencode für einen AVR (&amp;quot;hex-Datei&amp;quot;) aus C-Quellcode (&amp;quot;c-Dateien&amp;quot;) anhand von &amp;quot;make&amp;quot; und den &amp;quot;Makefiles&amp;quot; näher erläutert. Viele der darin beschriebenen Optionen findet man auch im Konfigurationsdialog des avr-gcc-Plugins von AVRStudio (AVRStudio generiert ein makefile in einem Unterverzeichnis des Projektverzeichnisses). &lt;br /&gt;
&lt;br /&gt;
* Das Generieren des Programms ohne IDE und ohne Makefile. In diesem Fall muss die Quellcodedatei durch eine vorgefertigte Kommandofolge an den Compiler übergeben werden. Der Artikel [[C ohne Makefile]] zeigt, wie das funktioniert. Diese Vorgehensweise empfiehlt sich jedoch nur für kleine Programme, die nicht auf verschiedene Quellcodedateien verteilt sind.&lt;br /&gt;
&lt;br /&gt;
Beim Wechsel vom makefile-Ansatz nach WinAVR-Vorlage zu AVRStudio ist darauf zu achten, dass AVRStudio (Stand: AVRStudio Version 4.13) bei einem neuen Projekt die Optimierungsoption (vgl. Artikel [[AVR-GCC-Tutorial/Exkurs_Makefiles|AVR-GCC-Tutorial/Exkurs: Makefiles]], typisch: -Os) nicht einstellt und die mathematische Bibliothek der avr-libc (libm.a, Linker-Option -lm) nicht einbindet. (Hinweis: Bei Version 4.16 wird beides bereits gesetzt). Beides ist Standard bei Verwendung von makefiles nach WinAVR-Vorlage und sollte daher auch im Konfigurationsdialog des avr-gcc-Plugins von AVRStudio &amp;quot;manuell&amp;quot; eingestellt werden, um auch mit AVRStudio kompakten Code zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Einführungsbeispiel =&lt;br /&gt;
&lt;br /&gt;
Zum Einstieg ein kleines Beispiel, an dem die Nutzung des Compilers und der Hilfsprogramme (der sogenannten &#039;&#039;Toolchain&#039;&#039;) demonstriert wird. Detaillierte Erläuterungen folgen in den weiteren Abschnitten dieses Tutorials.&lt;br /&gt;
&lt;br /&gt;
Das Programm soll auf einem AVR Mikrocontroller einige Ausgänge ein- und andere ausschalten. Das Beispiel ist für einen ATmega16 programmiert ([http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf Datenblatt]), kann aber sinngemäß für andere Controller der AVR-Familie modifiziert werden. &lt;br /&gt;
&lt;br /&gt;
Ein kurzes Wort zur Hardware: Bei diesem Programm werden alle Pins von PORTB auf Ausgang gesetzt, und einige davon werden auf HIGH andere auf LOW gesetzt. Das kann je nach angeschlossener Hardware an diesen Pins kritisch sein. Am ungefährlichsten ist es, wenn nichts an den Pins angeschlossen ist und man die Funktion des Programmes durch eine Spannungsmessung mit einem Multimeter kontrolliert. Die Spannung wird dabei zwischen GND-Pin und den einzelnen Pins von PORTB gemessen.&lt;br /&gt;
&lt;br /&gt;
Zunächst der Quellcode der Anwendung, der in einer Text-Datei mit dem Namen &#039;&#039;main.c&#039;&#039; abgespeichert wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Alle Zeichen zwischen Schrägstrich-Stern &lt;br /&gt;
   und Stern-Schrägstrich sind Kommentare */&lt;br /&gt;
&lt;br /&gt;
// Zeilenkommentare sind ebenfalls möglich&lt;br /&gt;
// alle auf die beiden Schrägstriche folgenden&lt;br /&gt;
// Zeichen einer Zeile sind Kommentar&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;          // (1)&lt;br /&gt;
&lt;br /&gt;
int main (void) {            // (2)&lt;br /&gt;
&lt;br /&gt;
   DDRB  = 0xFF;             // (3)&lt;br /&gt;
   PORTB = 0x03;             // (4)&lt;br /&gt;
&lt;br /&gt;
   while(1) {                // (5)&lt;br /&gt;
     /* &amp;quot;leere&amp;quot; Schleife*/   // (6)&lt;br /&gt;
   }                         // (7)&lt;br /&gt;
&lt;br /&gt;
   /* wird nie erreicht */&lt;br /&gt;
   return 0;                 // (8)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# In dieser Zeile wird eine sogenannte Header-Datei eingebunden. In &amp;lt;code&amp;gt;avr/io.h&amp;lt;/code&amp;gt; sind die Registernamen definiert, die im späteren Verlauf genutzt werden. Auch unter Windows wird ein&amp;amp;nbsp;&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; zur Kennzeichnung von Unterverzeichnissen in Include-Dateinamen verwendet und kein&amp;amp;nbsp;&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Hier beginnt das eigentliche Programm. Jedes C-Programm beginnt mit den Anweisungen in der Funktion &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Die Anschlüsse eines AVR (Pins) werden zu Blöcken zusammengefasst, einen solchen Block bezeichnet man als Port. Beim ATmega16 hat jeder Port 8 Anschlüsse, bei kleineren AVRs können einem Port auch weniger als 8 Anschlüsse zugeordnet sein. Da per Definition (Datenblatt) alle gesetzten Bits in einem Datenrichtungsregister den entsprechenden Anschluss auf Ausgang schalten, werden mit DDRB=0xff alle Anschlüsse des Ports B als Ausgänge eingestellt.&lt;br /&gt;
# Die den ersten beiden Bits des Ports zugeordneten Anschlüsse (PB0 und PB1) werden 1, alle anderen Anschlüsse des Ports B (PB2-PB7) zu 0. Aktivierte Ausgänge (logisch 1 oder &amp;quot;high&amp;quot;) liegen auf Betriebsspannung (VCC, meist 5 Volt), nicht aktivierte Ausgänge führen 0 Volt (GND, Bezugspotential). Es ist sinnvoll, sich möglichst frühzeitig eine alternative Schreibweise beizubringen, die wegen der leichteren Überprüfbarkeit und Portierbarkeit oft im weiteren Tutorial und in Forenbeiträgen benutzt wird. Die Zuordnung sieht in diesem Fall so aus, Näheres dazu im Artikel [[Bitmanipulation]]:&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;PORTB = (1&amp;lt;&amp;lt;PB1) | (1&amp;lt;&amp;lt;PB0);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ist der Beginn der sogenannte &#039;&#039;Hauptschleife&#039;&#039; (main-loop). Dies ist eine Endlosschleife, welche kontinuierlich wiederkehrende Befehle enthält.&lt;br /&gt;
# In diesem Beispiel ist die Hauptschleife leer. Der Controller durchläuft die Schleife immer wieder, ohne dass etwas passiert. Eine solche Schleife ist notwendig, da es auf dem Controller kein Betriebssystem gibt, das nach Beendigung des Programmes die Kontrolle übernehmen könnte. Ohne diese Schleife kehrt das Programm aus &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; zurück, alle Interrupts werden deaktiviert und eine Endlosschleife betreten.&lt;br /&gt;
# Ende der Hauptschleife und Sprung zur passenden, öffnenden Klammer, also zu 5.&lt;br /&gt;
# ist das Programmende. Die Zeile ist nur aus Gründen der C-Kompatibilität enthalten: &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;int main(void)&amp;lt;/syntaxhighlight&amp;gt; besagt, dass die Funktion einen int-Wert zurückgibt. Die Anweisung wird aber nicht erreicht, da das Programm die Hauptschleife nie verlässt.&lt;br /&gt;
&lt;br /&gt;
Um diesen Quellcode in ein lauffähiges Programm zu übersetzen, wird hier ein Makefile genutzt. Das verwendete Makefile findet sich auf der Seite [[Beispiel Makefile]] und basiert auf der Vorlage, die in WinAVR mitgeliefert wird und wurde bereits angepasst (Controllertyp ATmega16). Man kann das Makefile bearbeiten und an andere Controller anpassen oder sich mit dem Programm MFile menügesteuert ein Makefile &amp;quot;zusammenklicken&amp;quot;. Das Makefile speichert man unter dem Namen &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; (ohne Endung) im selben Verzeichnis, in dem auch die Datei &amp;lt;code&amp;gt;main.c&amp;lt;/code&amp;gt; mit dem Programmcode abgelegt ist. Detailliertere Erklärungen zur Funktion von Makefiles finden sich im Artikel [[AVR-GCC-Tutorial/Exkurs_Makefiles|Exkurs: Makefiles]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
D:\beispiel&amp;gt;dir&lt;br /&gt;
&lt;br /&gt;
 Verzeichnis von D:\beispiel&lt;br /&gt;
&lt;br /&gt;
28.11.2006  22:53    &amp;lt;DIR&amp;gt;          .&lt;br /&gt;
28.11.2006  22:53    &amp;lt;DIR&amp;gt;          ..&lt;br /&gt;
28.11.2006  20:06               118 main.c&lt;br /&gt;
28.11.2006  20:03            16.810 Makefile&lt;br /&gt;
               2 Datei(en)         16.928 Bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun gibt man &#039;&#039;make all&#039;&#039; ein. Falls das mit WinAVR installierte Programmers Notepad genutzt wird, gibt es dazu einen Menüpunkt im Tools Menü. Sind alle Einstellungen korrekt, entsteht eine Datei &amp;lt;code&amp;gt;main.hex&amp;lt;/code&amp;gt;, in welcher der Code für den AVR enthalten ist. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
D:\beispiel&amp;gt;make all&lt;br /&gt;
&lt;br /&gt;
-------- begin --------&lt;br /&gt;
avr-gcc (GCC) 3.4.6&lt;br /&gt;
Copyright (C) 2006 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&lt;br /&gt;
Compiling C: main.c&lt;br /&gt;
avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -f&lt;br /&gt;
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef&lt;br /&gt;
 -Wa,-adhlns=obj/main.lst  -std=gnu99 -Wundef -MD -MP -MF .dep/main.o.d main.c -&lt;br /&gt;
o obj/main.o&lt;br /&gt;
&lt;br /&gt;
Linking: main.elf&lt;br /&gt;
avr-gcc -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funs&lt;br /&gt;
igned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -W&lt;br /&gt;
a,-adhlns=obj/main.o  -std=gnu99 -Wundef -MD -MP -MF .dep/main.elf.d obj/main.o&lt;br /&gt;
--output main.elf -Wl,-Map=main.map,--cref    -lm&lt;br /&gt;
&lt;br /&gt;
Creating load file for Flash: main.hex&lt;br /&gt;
avr-objcopy -O ihex -R .eeprom main.elf main.hex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Inhalt der hex-Datei kann nun zum Controller übertragen werden. Dies kann z.&amp;amp;nbsp;B. über In-System-Programming ([[ISP]]) erfolgen, das im [[AVR-Tutorial: Equipment]] beschrieben ist. Makefiles nach der WinAVR/MFile-Vorlage sind für die Nutzung des Programms [[AVRDUDE]] vorbereitet. Wenn man den Typ und Anschluss des Programmiergerätes richtig eingestellt hat, kann mit &#039;&#039;make program&#039;&#039; die Übertragung mittels AVRDUDE gestartet werden. Jede andere Software, die hex-Dateien lesen und zu einem AVR übertragen kann&amp;lt;ref&amp;gt;z.&amp;amp;nbsp;B. [[Pony-Prog_Tutorial|Ponyprog]], yapp, AVRStudio&amp;lt;/ref&amp;gt;, kann natürlich ebenfalls genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Startet man nun den Controller (Reset-Taster oder Stromzufuhr aus/an), werden vom Programm die Anschlüsse PB0 und PB1 auf 1 gesetzt. Man kann mit einem Messgerät nun an diesem Anschluss die Betriebsspannung messen oder eine [[LED]] leuchten lassen (Anode an den Pin, Vorwiderstand nicht vergessen). An den Anschlüssen PB2-PB7 misst man 0 Volt. Eine mit der Anode mit einem dieser Anschlüsse verbundene LED leuchtet nicht.&lt;br /&gt;
&lt;br /&gt;
= Ganzzahlige Datentypen (Integer) =&lt;br /&gt;
&lt;br /&gt;
Bei der Programmierung von Mikrokontrollern ist die Definition einiger ganzzahliger Datentypen sinnvoll, an denen eindeutig die Bit-Länge abgelesen werden kann.&lt;br /&gt;
&lt;br /&gt;
Standardisierte Datentypen werden in der Header-Datei &amp;lt;code&amp;gt;stdint.h&amp;lt;/code&amp;gt; definiert, die folgendermaßen eingebunden werden kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;#include &amp;lt;stdint.h&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|+ &#039;&#039;&#039;int-Typen aus &amp;lt;code&amp;gt;stdint.h&amp;lt;/code&amp;gt; (C99)&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;| Vorzeichenbehaftete int-Typen&lt;br /&gt;
|- bgcolor=&amp;quot;#e8e8ff&amp;quot;&lt;br /&gt;
! Typname || Bit-Breite ||colspan=&amp;quot;2&amp;quot;| Wertebereich&lt;br /&gt;
|align=&amp;quot;center| &#039;&#039;&#039;C-Entsprechung&#039;&#039;&#039; (avr-gcc)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;int8_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 8 || −128 ⋯ 127 || −2&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; ⋯ 2&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;signed char&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;int16_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 16 || −32768 ⋯ 32767 || −2&amp;lt;sup&amp;gt;15&amp;lt;/sup&amp;gt; ⋯ 2&amp;lt;sup&amp;gt;15&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;signed short&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;signed int&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;int32_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 32 || −2147483648 ⋯ 2147483647 || −2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; ⋯ 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;signed long&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;int64_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 64 || −9223372036854775808 ⋯ 9223372036854775807 || −2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt; ⋯ 2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;signed long long&amp;lt;/code&amp;gt;&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;| Vorzeichenlose int-Typen&lt;br /&gt;
|- bgcolor=&amp;quot;#e8e8ff&amp;quot;&lt;br /&gt;
! Typname || Bit-Breite ||colspan=&amp;quot;2&amp;quot;| Wertebereich&lt;br /&gt;
|align=&amp;quot;center| &#039;&#039;&#039;C-Entsprechung&#039;&#039;&#039; (avr-gcc)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uint8_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 8 || 0 ⋯ 255 || 0 ⋯ 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;unsigned char&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uint16_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 16 || 0 ⋯ 65535 || 0 ⋯ 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;unsigned short&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unsigned int&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uint32_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 32 || 0 ⋯ 4294967295 || 0 ⋯ 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; ||align=&amp;quot;right&amp;quot;| 64 || 0 ⋯ 18446744073709551615 || 0 ⋯ 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt;−1 || &amp;lt;code&amp;gt;unsigned long long&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den Typen gibt es auch Makros für die Bereichsgrenzen wie &amp;lt;code&amp;gt;INT8_MIN&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;UINT16_MAX&amp;lt;/code&amp;gt;. Siehe dazu auch: [http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html Dokumentation der avr-libc: Standard Integer Types].&lt;br /&gt;
&lt;br /&gt;
= Grundsätzlicher Programmaufbau eines µC-Programms =&lt;br /&gt;
&lt;br /&gt;
Wir unterscheiden zwischen 2 verschiedenen Methoden, um ein&lt;br /&gt;
Mikrocontroller-Programm zu schreiben, und zwar völlig unabhängig davon, in&lt;br /&gt;
welcher Programmiersprache das Programm geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
== Sequentieller Programmablauf ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Sequentielle Programme.gif|left]]&lt;br /&gt;
Bei dieser Programmiertechnik wird eine Endlosschleife programmiert, welche im&lt;br /&gt;
Wesentlichen immer den gleichen Aufbau hat. Es wird hier nach dem sogenannten EVA-Prinzip gehandelt. EVA steht für &amp;quot;Eingabe, Verarbeitung, Ausgabe&amp;quot;.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
== Interruptgesteuerter Programmablauf ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Interrupt Programme.gif|left]]&lt;br /&gt;
Bei dieser Methode werden beim Programmstart zuerst die gewünschten Interruptquellen aktiviert und dann in eine Endlosschleife gegangen, in welcher Dinge erledigt werden können, welche nicht zeitkritisch sind. Wenn ein Interrupt ausgelöst wird, so wird automatisch die zugeordnete Interruptfunktion ausgeführt.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
= Zugriff auf Register =&lt;br /&gt;
&lt;br /&gt;
Die AVR-Controller verfügen über eine Vielzahl von Registern. Die meisten&lt;br /&gt;
davon sind sogenannte Schreib-/Leseregister. Das heißt, das Programm kann die&lt;br /&gt;
Inhalte der Register sowohl auslesen als auch beschreiben.&lt;br /&gt;
&lt;br /&gt;
Register haben einen besonderen Stellenwert bei den AVR Controllern. Sie dienen dem Zugriff auf die Ports und die Schnittstellen des Controllers. Wir unterscheiden zwischen 8-Bit und 16-Bit Registern. Vorerst behandeln wir die 8-Bit Register.&lt;br /&gt;
&lt;br /&gt;
Einzelne Register sind bei allen AVRs vorhanden, andere wiederum nur bei bestimmten Typen. So sind beispielsweise die Register, welche für den Zugriff auf den UART notwendig sind, selbstverständlich nur bei denjenigen Modellen vorhanden, welche über einen integrierten Hardware UART bzw. USART verfügen.&lt;br /&gt;
&lt;br /&gt;
Die Namen der Register sind in den Headerdateien zu den entsprechenden AVR-Typen definiert. Dazu muss man den Namen der controllerspezifischen Headerdatei nicht kennen. Es reicht aus, die allgemeine Headerdatei &#039;&#039;avr/io.h&#039;&#039; einzubinden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist im Makefile der MCU-Typ z.&amp;amp;nbsp;B. mit dem Inhalt atmega8 definiert (und wird somit per -mmcu=atmega8 an den Compiler übergeben), wird beim Einlesen der io.h-Datei implizit (&amp;quot;automatisch&amp;quot;) auch die iom8.h-Datei mit den Register-Definitionen für den ATmega8 eingelesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Wohl besser als Anhang - spaeter... --&amp;gt;&lt;br /&gt;
Intern wird diese &amp;quot;Automatik&amp;quot; wie folgt realisiert: Der Controllertyp wird dem Compiler als Parameter übergeben (vgl. &#039;&#039;avr-gcc -c -mmcu=atmega16 [...]&#039;&#039; im Einführungsbeispiel). Wird ein Makefile nach der WinAVR/mfile-Vorlage verwendet, setzt man die Variable &#039;&#039;MCU&#039;&#039;, der Inhalt dieser Variable wird dann an passender Stelle für die Compilerparameter verwendet. Der Compiler definiert intern eine dem mmcu-Parameter zugeordnete &amp;quot;Variable&amp;quot; (genauer: ein Makro) mit dem Namen des Controllers, vorangestelltem &#039;&#039;__AVR_&#039;&#039; und angehängten Unterstrichen (z.&amp;amp;nbsp;B. wird bei &#039;&#039;-mmcu=atmega16&#039;&#039; das Makro &#039;&#039;__AVR_ATmega16__&#039;&#039; definiert). Beim Einbinden der Header-Datei &#039;&#039;avr/io.h&#039;&#039; wird geprüft, ob das jeweilige Makro definiert ist und die zum Controller passende Definitionsdatei eingelesen. Zur Veranschaulichung einige Ausschnitte aus einem Makefile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
# MCU Type (&amp;quot;name&amp;quot;) setzen:&lt;br /&gt;
MCU = atmega16&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
## Verwendung des Inhalts von MCU (hier atmega16) fuer die &lt;br /&gt;
## Compiler- und Assembler-Parameter&lt;br /&gt;
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)&lt;br /&gt;
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)&lt;br /&gt;
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
## Aufruf des Compilers:&lt;br /&gt;
## mit den Parametern ($(ALL_CFLAGS) ist -mmcu=$(MCU)[...] = -mmcu=atmega16[...]&lt;br /&gt;
$(OBJDIR)/%.o : %.c&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_COMPILING) $&amp;lt;&lt;br /&gt;
	$(CC) -c $(ALL_CFLAGS) $&amp;lt; -o $@ &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da --mmcu=atmega16 übergeben wurde, wird __AVR_ATmega16__ definiert und kann in avr/io.h zur Fallunterscheidung genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// avr/io.h &lt;br /&gt;
// (bei WinAVR-Standardinstallation in C:\WinAVR\avr\include\avr)&lt;br /&gt;
[...]&lt;br /&gt;
#if defined (__AVR_AT94K__)&lt;br /&gt;
#  include &amp;lt;avr/ioat94k.h&amp;gt;&lt;br /&gt;
// [...]&lt;br /&gt;
#elif defined (__AVR_ATmega16__)&lt;br /&gt;
// da __AVR_ATmega16__ definiert ist, wird avr/iom16.h eingebunden:&lt;br /&gt;
#  include &amp;lt;avr/iom16.h&amp;gt;&lt;br /&gt;
// [...]&lt;br /&gt;
#else&lt;br /&gt;
#  if !defined(__COMPILING_AVR_LIBC__)&lt;br /&gt;
#    warning &amp;quot;device type not defined&amp;quot;&lt;br /&gt;
#  endif&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Beispiele in den folgenden Abschnitten demonstrieren den Zugriff auf Register anhand der Register für I/O-Ports (PORTx, DDRx, PINx), die Vorgehensweise ist jedoch für alle Register (z.&amp;amp;nbsp;B. die des UART, ADC, SPI) analog.&lt;br /&gt;
&lt;br /&gt;
== Schreiben in Register ==&lt;br /&gt;
&lt;br /&gt;
Zum Schreiben kann man Register einfach wie eine Variable setzen.&amp;lt;ref&amp;gt;In Quellcodes, die für ältere Versionen des avr-gcc/der avr-libc entwickelt wurden, erfolgt der Schreibzugriff über die Funktion outp(). Aktuelle Versionen des Compilers unterstützen den Zugriff nun direkt, outp() ist nicht mehr erforderlich.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    /* Setzt das Richtungsregister des Ports A auf 0xff &lt;br /&gt;
       (alle Pins als Ausgang, vgl. Abschnitt Zugriff auf Ports): */&lt;br /&gt;
    DDRA = 0xff;    &lt;br /&gt;
&lt;br /&gt;
    /* Setzt PortA auf 0x03, Bit 0 und 1 &amp;quot;high&amp;quot;, restliche &amp;quot;low&amp;quot;: */&lt;br /&gt;
    PORTA = 0x03;   &lt;br /&gt;
&lt;br /&gt;
    // Setzen der Bits 0,1,2,3 und 4&lt;br /&gt;
    // Binär 00011111 = Hexadezimal 1F&lt;br /&gt;
    DDRB = 0x1F;    /* direkte Zuweisung - unübersichtlich */&lt;br /&gt;
&lt;br /&gt;
    /* Ausführliche Schreibweise: identische Funktionalität, mehr Tipparbeit&lt;br /&gt;
       aber übersichtlicher und selbsterklärend: */&lt;br /&gt;
    DDRB = (1 &amp;lt;&amp;lt; DDB0) | (1 &amp;lt;&amp;lt; DDB1) | (1 &amp;lt;&amp;lt; DDB2) | (1 &amp;lt;&amp;lt; DDB3) | (1 &amp;lt;&amp;lt; DDB4);&lt;br /&gt;
&lt;br /&gt;
    while (1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ausführliche Schreibweise sollte bevorzugt verwendet werden, da dadurch die Zuweisungen selbsterklärend sind und somit der Code leichter nachvollzogen werden kann. Atmel verwendet sie auch bei Beispielen in Datenblätten und in den allermeisten Quellcodes zu Application-Notes. Mehr zu der Schreibweise mit &amp;quot;|&amp;quot; und &amp;quot;&amp;lt;&amp;lt;&amp;quot; findet man unter [[Bitmanipulation]].&lt;br /&gt;
&lt;br /&gt;
Der gcc C-Compiler unterstützt ab Version 4.3.0 Konstanten im Binärformat, z.&amp;amp;nbsp;B. DDRB&amp;amp;nbsp;=&amp;amp;nbsp;0b00011111. Diese Schreibweise ist jedoch nur in GNU-C verfügbar und nicht in ISO-C definiert. Man sollte sie daher nicht verwenden, wenn Code mit anderen ausgetauscht oder mit anderen Compilern bzw. älteren Versionen des gcc genutzt werden soll.&lt;br /&gt;
&lt;br /&gt;
== Verändern von Registerinhalten ==&lt;br /&gt;
&lt;br /&gt;
Einzelne Bits setzt und löscht man &amp;quot;Standard-C-konform&amp;quot; mittels logischer (Bit-) Operationen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 x |= (1 &amp;lt;&amp;lt; Bitnummer);  // Hiermit wird ein Bit in x gesetzt&lt;br /&gt;
 x &amp;amp;= ~(1 &amp;lt;&amp;lt; Bitnummer); // Hiermit wird ein Bit in x geloescht&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird jeweils nur der Zustand des angegebenen Bits geändert, der vorherige Zustand der anderen Bits bleibt erhalten. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
#define MEINBIT 2&lt;br /&gt;
...&lt;br /&gt;
PORTA |= (1 &amp;lt;&amp;lt; MEINBIT);    /* setzt Bit 2 an PortA auf 1 */&lt;br /&gt;
PORTA &amp;amp;= ~(1 &amp;lt;&amp;lt; MEINBIT);   /* loescht Bit 2 an PortA */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode lassen sich auch mehrere Bits eines Registers gleichzeitig setzen und löschen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
DDRA &amp;amp;= ~( (1&amp;lt;&amp;lt;PA0) | (1&amp;lt;&amp;lt;PA3) );  /* PA0 und PA3 als Eingaenge */&lt;br /&gt;
PORTA |= ( (1&amp;lt;&amp;lt;PA0) | (1&amp;lt;&amp;lt;PA3) );  /* Interne Pull-Up fuer beide einschalten */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei bestimmten AVR Registern mit Bits, die durch Beschreiben mit einer logischen 1 gelöscht werden, muss eine absolute Zuweisung benutzt werden. Ein ODER löscht in diesen Registern ALLE gesetzten Bits!&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
TIFR2 = (1&amp;lt;&amp;lt;OCF2A); // Nur Bit OCF2A löschen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Quellcodes, die für ältere Version den des avr-gcc/der avr-libc entwickelt wurden, werden einzelne Bits mittels der Funktionen sbi und cbi gesetzt bzw. gelöscht. Beide Funktionen sind nicht mehr erforderlich.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [[Bitmanipulation]]&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitt Modules/Special Function Registers&lt;br /&gt;
&lt;br /&gt;
== Lesen aus Registern ==&lt;br /&gt;
&lt;br /&gt;
Zum Lesen kann man auf Register einfach wie auf eine Variable zugreifen. In Quellcodes, die für ältere Versionen des avr-gcc/der avr-libc entwickelt wurden, erfolgt der Lesezugriff über die Funktion inp(). Aktuelle Versionen des Compilers unterstützen den Zugriff nun direkt und inp() ist nicht mehr erforderlich.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
uint8_t foo;&lt;br /&gt;
&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    /* kopiert den Status der Eingabepins an PortB &lt;br /&gt;
       in die Variable foo: */&lt;br /&gt;
    foo = PINB;    &lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Abfrage der Zustände von Bits erfolgt durch Einlesen des gesamten Registerinhalts und ausblenden der Bits deren Zustand nicht von Interesse ist. Einige Beispiele zum Prüfen ob Bits gesetzt oder gelöscht sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define MEINBIT0 0 &lt;br /&gt;
#define MEINBIT2 2&lt;br /&gt;
&lt;br /&gt;
uint8_t i;&lt;br /&gt;
&lt;br /&gt;
extern test1();&lt;br /&gt;
&lt;br /&gt;
// Funkion test1 aufrufen, wenn Bit 0 in Register PINA gesetzt (1) ist&lt;br /&gt;
i = PINA;         // Inhalt in Arbeitsvariable&lt;br /&gt;
i = i &amp;amp; 0x01;     // alle Bits bis auf Bit 0 ausblenden (bitweise und)&lt;br /&gt;
                  // falls das Bit gesetzt war, hat i den Inhalt 1&lt;br /&gt;
if ( i != 0 ) {   // Ergebnis ungleich 0 (wahr)? &lt;br /&gt;
  test1();         // dann muss Bit 0 in i gesetzt sein -&amp;gt; Funktion aufrufen&lt;br /&gt;
}&lt;br /&gt;
// verkürzt:&lt;br /&gt;
if ( ( PINA &amp;amp; 0x01 ) != 0 ) {&lt;br /&gt;
  test1();&lt;br /&gt;
}&lt;br /&gt;
// nochmals verkürzt:&lt;br /&gt;
if ( PINA &amp;amp; 0x01 ) {&lt;br /&gt;
  test1();&lt;br /&gt;
}&lt;br /&gt;
// mit definierter Bitnummer:&lt;br /&gt;
if ( PINA &amp;amp; ( 1 &amp;lt;&amp;lt; MEINBIT0 ) ) {&lt;br /&gt;
  test1();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Funktion aufrufen, wenn Bit 0 und/oder Bit 2 gesetzt ist. (Bit 0 und 2 also Wert 5) &lt;br /&gt;
// (Bedenke: Bit 0 hat Wert 1, Bit 1 hat Wert 2 und Bit 2 hat Wert 4)&lt;br /&gt;
if ( PINA &amp;amp; 0x05 ) {&lt;br /&gt;
  test1();  // Vergleich &amp;lt;&amp;gt; 0 (wahr), also mindestens eines der Bits gesetzt&lt;br /&gt;
}&lt;br /&gt;
// mit definierten Bitnummern:&lt;br /&gt;
if ( PINA &amp;amp; ( ( 1 &amp;lt;&amp;lt; MEINBIT0 ) | ( 1 &amp;lt;&amp;lt; MEINBIT2 ) ) ) {&lt;br /&gt;
  test1();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Funktion aufrufen, wenn Bit 0 und Bit 2 gesetzt sind&lt;br /&gt;
if ( ( PINA &amp;amp; 0x05 ) == 0x05 ) {  // nur wahr, wenn beide Bits gesetzt&lt;br /&gt;
  test1();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Funktion test2() aufrufen, wenn Bit 0 gelöscht (0) ist&lt;br /&gt;
i = PINA;        // einlesen in temporäre Variable&lt;br /&gt;
i = i &amp;amp; 0x01;    // maskieren von Bit 0&lt;br /&gt;
if ( i == 0 ) {  // Vergleich ist wahr, wenn Bit 0 nicht gesetzt ist&lt;br /&gt;
  test2();&lt;br /&gt;
}&lt;br /&gt;
// analog mit not-Operator&lt;br /&gt;
if ( !i ) {&lt;br /&gt;
  test2();&lt;br /&gt;
}&lt;br /&gt;
// nochmals verkürzt:&lt;br /&gt;
if ( !( PINA &amp;amp; 0x01 ) ) {&lt;br /&gt;
  test2();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Warten auf einen bestimmten Zustand ==&lt;br /&gt;
&lt;br /&gt;
Es gibt in der Bibliothek avr-libc Funktionen, die warten, bis ein bestimmter Zustand eines Bits erreicht ist. Es ist allerdings normalerweise eine eher unschöne Programmiertechnik, da in diesen Funktionen &amp;quot;blockierend&amp;quot; gewartet wird. Der Programmablauf bleibt also an dieser Stelle stehen, bis das maskierte Ereignis erfolgt ist. Setzt man den [[Watchdog]] ein, muss man darauf achten, dass dieser auch noch getriggert wird (Zurücksetzen des Watchdogtimers). &lt;br /&gt;
&lt;br /&gt;
Die Funktion &#039;&#039;&#039;loop_until_bit_is_set&#039;&#039;&#039; wartet in einer Schleife, bis das definierte Bit gesetzt ist. Wenn das Bit beim Aufruf der Funktion bereits gesetzt ist, wird die Funktion sofort wieder verlassen. Das niederwertigste Bit hat die Bitnummer 0. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/* Warten bis Bit Nr. 2 (das dritte Bit) in Register PINA gesetzt (1) ist */&lt;br /&gt;
&lt;br /&gt;
#define WARTEPIN PINA&lt;br /&gt;
#define WARTEBIT PA2&lt;br /&gt;
&lt;br /&gt;
// mit der avr-libc Funktion:&lt;br /&gt;
loop_until_bit_is_set(WARTEPIN, WARTEBIT);&lt;br /&gt;
&lt;br /&gt;
// dito in &amp;quot;C-Standard&amp;quot;:&lt;br /&gt;
// Durchlaufe die (leere) Schleife solange das WARTEBIT in Register WARTEPIN&lt;br /&gt;
// _nicht_ ungleich 0 (also 0) ist.&lt;br /&gt;
while ( !(WARTEPIN &amp;amp; (1 &amp;lt;&amp;lt; WARTEBIT)) ) {}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktion &#039;&#039;&#039;loop_until_bit_is_clear&#039;&#039;&#039; wartet in einer Schleife, bis das definierte Bit gelöscht ist. Wenn das Bit beim Aufruf der Funktion bereits gelöscht ist, wird die Funktion sofort wieder verlassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/* Warten bis Bit Nr. 4 (das fuenfte Bit) in Register PINB geloescht (0) ist */&lt;br /&gt;
#define WARTEPIN PINB&lt;br /&gt;
#define WARTEBIT PB4&lt;br /&gt;
&lt;br /&gt;
// avr-libc-Funktion:&lt;br /&gt;
loop_until_bit_is_clear(WARTEPIN, WARTEBIT);&lt;br /&gt;
&lt;br /&gt;
// dito in &amp;quot;C-Standard&amp;quot;:&lt;br /&gt;
// Durchlaufe die (leere) Schleife solange das WARTEBIT in Register WARTEPIN&lt;br /&gt;
// gesetzt (1) ist &lt;br /&gt;
while ( WARTEPIN &amp;amp; (1&amp;lt;&amp;lt;WARTEBIT) ) {}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Universeller und auch auf andere Plattformen besser übertragbar ist die Verwendung von C-Standardoperationen.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitt Modules/Special Function Registers&lt;br /&gt;
* [[Bitmanipulation]]&lt;br /&gt;
&lt;br /&gt;
== 16-Bit Register (ADC, ICR1, OCR1x, TCNT1, UBRR) ==&lt;br /&gt;
&lt;br /&gt;
Einige der Portregister in den AVR-Controllern sind 16 Bit breit. Im Datenblatt sind diese Register üblicherweise mit dem Suffix &amp;quot;L&amp;quot; (Low-Byte) und &amp;quot;H&amp;quot; (High-Byte) versehen. Die avr-libc definiert zusätzlich die meisten dieser Variablen die Bezeichnung ohne &amp;quot;L&amp;quot; oder &amp;quot;H&amp;quot;. Auf diese Register kann dann direkt zugegriffen werden. Dies ist zum Beispiel der Fall für Register wie ADC oder TCNT1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    uint16_t foo;&lt;br /&gt;
&lt;br /&gt;
    /* setzt die Wort-Variable foo auf den Wert der letzten AD-Wandlung */&lt;br /&gt;
    foo = ADC; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei anderen Registern, wie zum Beispiel Baudraten-Register, liegen High- und Low-Teil nicht direkt nebeneinander im SFR-Bereich, so dass ein 16-Bit Zugriff nicht möglich ist und der Zugriff zusammengebastelt werden muss:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#define F_CPU 3686400&lt;br /&gt;
#endif&lt;br /&gt;
#define UART_BAUD_RATE 9600&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
   uint16_t baud = F_CPU / (UART_BAUD_RATE * 16L) -1;&lt;br /&gt;
&lt;br /&gt;
   UBRRH = (uint8_t) (baud &amp;gt;&amp;gt; 8);&lt;br /&gt;
   UBRRL = (uint8_t) baud;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einigen AVR-Typen wie ATmega8 oder ATmega16 teilen sich UBRRH und UCSRC die gleiche Speicher-Adresse. Damit der AVR trotzdem zwischen den beiden Registern unterscheiden kann, bestimmt das Bit7 (URSEL), welches Register tatsächlich beschrieben werden soll. &#039;&#039;1000 0011&#039;&#039; (0x83) adressiert demnach UCSRC und übergibt den Wert &#039;&#039;3&#039;&#039;. Und &#039;&#039;0000 0011&#039;&#039; (0x3) adressiert UBRRH und übergibt ebenfalls den Wert &#039;&#039;3&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Speziell bei den 16-Bit-Timern und auch beim ADC ist es bei allen Zugriffen auf Datenregister erforderlich, dass diese Daten synchronisiert sind. Wenn z.&amp;amp;nbsp;B. bei einem 16-Bit-Timer das High-Byte des Zählregisters gelesen wurde und vor dem Lesezugriff auf das Low-Byte ein Überlauf des Low-Bytes stattfindet, erhält man einen völlig unsinnigen Wert. Auch die Compare-Register müssen synchron geschrieben werden, da es ansonsten zu unerwünschten Compare-Ereignissen kommen kann. &lt;br /&gt;
&lt;br /&gt;
Beim ADC besteht das Problem darin, dass zwischen den Zugriffen auf die beiden Teilregister eine Wandlung beendet werden kann und der ADC ein neues Ergebnis in ADCL und ADCH schreiben will, wodurch High- und Low-Byte nicht zusammenpassen.&lt;br /&gt;
&lt;br /&gt;
Um diese Datenmüllproduktion zu verhindern, gibt es in beiden Fällen eine Synchronisation, die jeweils durch den Zugriff auf das Low-Byte ausgelöst wird:&lt;br /&gt;
* Bei den Timer-Registern (das gilt für alle TCNT-, OCR- und ICR-Register bei den 16-Bit-Timern) wird bei einem &#039;&#039;Lesezugriff&#039;&#039; auf das Low-Byte automatisch das High-Byte in ein temporäres Register, das ansonsten nach außen nicht sichtbar ist, geschoben. Greift man nun &#039;&#039;anschließend&#039;&#039; auf das High-Byte zu, dann wird eben dieses temporäre Register gelesen.&lt;br /&gt;
* Bei einem &#039;&#039;Schreibzugriff&#039;&#039; auf eines der genannten Register wird das High-Byte in besagtem temporären Register zwischengespeichert und erst beim Schreiben des Low-Bytes werden &#039;&#039;beide&#039;&#039; gleichzeitig in das eigentliche Register übernommen.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für die Reihenfolge:&lt;br /&gt;
* Lesezugriff: Erst Low-Byte, dann High-Byte&lt;br /&gt;
* Schreibzugriff: Erst High-Byte, dann Low-Byte&lt;br /&gt;
&lt;br /&gt;
Des weiteren ist zu beachten, dass es für all diese 16-Bit-Register nur ein einziges temporäres Register gibt, so dass das Auftreten eines Interrupts, in dessen Handler ein solches Register manipuliert wird, bei einem durch ihn unterbrochenen Zugriff i.d.R. zu Datenmüll führt. 16-Bit-Zugriffe sind generell nicht atomar! Wenn mit Interrupts gearbeitet wird, kann es erforderlich sein, vor einem solchen Zugriff auf ein 16-Bit-Register die Interrupt-Bearbeitung zu deaktivieren.&lt;br /&gt;
&lt;br /&gt;
Beim ADC-Datenregister ADCH/ADCL ist die Synchronisierung anders gelöst. Hier wird beim Lesezugriff (ADCH/ADCL sind logischerweise read-only) auf das Low-Byte ADCL beide Teilregister für Zugriffe seitens des ADC so lange gesperrt, bis das High-Byte ADCH ausgelesen wurde. Dadurch kann der ADC nach einem Zugriff auf ADCL keinen neuen Wert in ADCH/ADCL ablegen, bis ADCH gelesen wurde. Ergebnisse von Wandlungen, die zwischen einem Zugriff auf ADCL und ADCH beendet werden, gehen verloren!&lt;br /&gt;
&lt;br /&gt;
Nach einem Zugriff auf ADCL muss grundsätzlich ADCH gelesen werden!&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen – also sowohl bei den Timern als auch beim ADC – werden vom C-Compiler 16-Bit Pseudo-Register zur Verfügung gestellt (z.&amp;amp;nbsp;B. TCNT1H/TCNT1L → TCNT1, ADCH/ADCL → ADC bzw. ADCW), bei deren Verwendung der Compiler automatisch die richtige Zugriffsreihenfolge regelt. In C-Programmen sollten grundsätzlich diese 16-Bit-Register verwendet werden! Sollte trotzdem ein Zugriff auf ein Teilregister erforderlich sein, sind obige Angaben zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, dass auch ein Zugriff auf die 16-Bit-Register vom Compiler in zwei 8-Bit-Zugriffe aufgeteilt wird und dementsprechend genauso nicht-atomar ist wie die Einzelzugriffe. Auch hier gilt, dass u.U. die Interrupt-Bearbeitung gesperrt werden muss, um Datenmüll zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
Beim ADC gibt es für den Fall, dass eine Auflösung von 8 Bit ausreicht, die Möglichkeit, das Ergebnis &amp;quot;linksbündig&amp;quot; in ADCH/ADCL auszurichten, so dass die relevanten 8 MSB in ADCH stehen. In diesem Fall muss bzw. sollte nur ADCH ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
ADC und ADCW sind unterschiedliche Bezeichner für das selbe Registerpaar. Üblicherweise kann man in C-Programmen ADC verwenden, was analog zu den anderen 16-Bit-Registern benannt ist. ADCW (ADC Word) existiert nur deshalb, weil die Headerdateien auch für Assembler vorgesehen sind und es bereits einen Assembler-Befehl namens &#039;&#039;adc&#039;&#039; gibt. &lt;br /&gt;
&lt;br /&gt;
Im Umgang mit 16-Bit Registern siehe auch:&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitt Related Pages/Frequently Asked Questions/Nr. 8&lt;br /&gt;
* Datenblatt Abschnitt &#039;&#039;Accessing 16-bit Registers&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== IO-Register als Parameter und Variablen ==&lt;br /&gt;
&lt;br /&gt;
Um Register als Parameter für eigene Funktionen übergeben zu können, muss man sie als einen volatile uint8_t Pointer übergeben. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
uint8_t key_pressed (volatile uint8_t *inputreg, uint8_t inputbit)&lt;br /&gt;
{&lt;br /&gt;
  static uint8_t last_state = 0;&lt;br /&gt;
 &lt;br /&gt;
  if (last_state == (*inputreg &amp;amp; (1&amp;lt;&amp;lt;inputbit)))&lt;br /&gt;
     return 0; /* keine Änderung */&lt;br /&gt;
 &lt;br /&gt;
  /* Wenn doch, warten bis etwaiges Prellen vorbei ist: */&lt;br /&gt;
  _delay_ms(20);&lt;br /&gt;
&lt;br /&gt;
  /* Zustand für nächsten Aufruf merken: */&lt;br /&gt;
  last_state = *inputreg &amp;amp; (1&amp;lt;&amp;lt;inputbit);&lt;br /&gt;
 &lt;br /&gt;
  /* und den entprellten Tastendruck zurückgeben: */&lt;br /&gt;
  return *inputreg &amp;amp; (1&amp;lt;&amp;lt;inputbit);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Beispiel für einen Funktionsaufruf: */&lt;br /&gt;
&lt;br /&gt;
void foo (void)&lt;br /&gt;
{&lt;br /&gt;
   uint8_t i = key_pressed (&amp;amp;PINB, PB1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Aufruf der Funktion mit call by value würde Folgendes bewirken: Beim Funktionseintritt wird nur eine Kopie des momentanen Portzustandes angefertigt, die sich unabhängig vom tatsächlichen Zustand das Ports nicht mehr ändert, womit die Funktion wirkungslos wäre. Die Übergabe eines Zeigers wäre die Lösung, wenn der Compiler nicht optimieren würde. Denn dadurch wird im Programm nicht von der Hardware gelesen, sondern wieder nur von einem Abbild im Speicher. Das Ergebnis wäre das gleiche wie oben. Mit dem Schlüsselwort volatile sagt man nun dem Compiler, dass die entsprechende Variable entweder durch andere Softwareroutinen (Interrupts) oder durch die Hardware verändert werden kann.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass avr-libc FAQ: &amp;quot;How do I pass an IO port as a parameter to a function?&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Zugriff auf IO-Ports =&lt;br /&gt;
&lt;br /&gt;
Jeder AVR implementiert eine unterschiedliche Menge an GPIO-Registern&lt;br /&gt;
(GPIO - General Purpose Input/Output). Diese Register dienen dazu:&lt;br /&gt;
* einzustellen welche der Anschlüsse (&amp;quot;Beinchen&amp;quot;) des Controllers als Ein- oder Ausgänge dienen&lt;br /&gt;
* bei Ausgängen deren Zustand festzulegen&lt;br /&gt;
* bei Eingängen deren Zustand zu erfassen&lt;br /&gt;
&lt;br /&gt;
Mittels GPIO werden digitale Zustände gesetzt und erfasst, d.h. die Spannung an einem Ausgang wird ein- oder ausgeschaltet und an einem Eingang wird erfasst, ob die anliegende Spannung über oder unter einem bestimmten Schwellwert liegt. Im Datenblatt Abschnitt Electrical Characteristics/DC Characteristics finden sich die Spannungswerte (V_OL, V_OH für Ausgänge, V_IL, V_IH für Eingänge).&lt;br /&gt;
&lt;br /&gt;
Die Verarbeitung von analogen Eingangswerten und die Ausgabe von Analogwerten wird in Kapitel [[AVR-GCC-Tutorial#Analoge_Ein-_und_Ausgabe|Analoge Ein- und Ausgabe]] behandelt.&lt;br /&gt;
&lt;br /&gt;
Die physischen Ein- und Ausgänge werden bei AVR-Controllern zu logischen Ports gruppiert.&lt;br /&gt;
&lt;br /&gt;
Alle Ports werden über Register gesteuert. Dazu sind jedem Port 3 Register zugeordnet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! width=&amp;quot;10%&amp;quot;|  DDRx&lt;br /&gt;
| Datenrichtungsregister für Port&#039;&#039;&#039;x&#039;&#039;&#039;. &lt;br /&gt;
&#039;&#039;&#039;x&#039;&#039;&#039; entspricht &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;B&#039;&#039;&#039;, &#039;&#039;&#039; C&#039;&#039;&#039; usw. je nach gewünschtem Port. Bit im Register gesetzt (1) für Ausgang, Bit gelöscht (0) für Eingang.&lt;br /&gt;
|- &lt;br /&gt;
! PINx&lt;br /&gt;
| Eingangsadresse für Port&#039;&#039;&#039;x&#039;&#039;&#039;. &lt;br /&gt;
Zustand des Ports. Die Bits in PINx entsprechen dem Zustand der als Eingang definierten Portpins. Bit 1 wenn Pin &amp;quot;high&amp;quot;, Bit 0 wenn Portpin low.&lt;br /&gt;
|-&lt;br /&gt;
! PORTx&lt;br /&gt;
| Datenregister für Port&#039;&#039;&#039;x&#039;&#039;&#039;. &lt;br /&gt;
Dieses Register wird verwendet, um die Ausgänge eines Ports anzusteuern. Bei Pins, die mittels DDRx auf Eingang geschaltet wurden, können über PORTx&lt;br /&gt;
die internen Pull-Up Widerstände aktiviert oder deaktiviert werden (1 = aktiv).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele gehen von einem AVR aus, der sowohl Port A als auch Port B besitzt. Sie müssen für andere AVRs (zum Beispiel ATmega8/48/88/168) entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Datenrichtung bestimmen ==&lt;br /&gt;
&lt;br /&gt;
Zuerst muss die Datenrichtung der verwendeten Pins bestimmt werden. Um dies zu erreichen, wird das Datenrichtungsregister des entsprechenden Ports beschrieben.&lt;br /&gt;
&lt;br /&gt;
Für jeden Pin, der als Ausgang verwendet werden soll, muss dabei das&lt;br /&gt;
entsprechende Bit auf dem Port gesetzt werden. Soll der Pin als Eingang&lt;br /&gt;
verwendet werden, muss das entsprechende Bit gelöscht sein.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Angenommen am Port B sollen die Pins 0 bis 4 als Ausgänge definiert werden, die noch verbleibenden Pins 5 bis 7 sollen als Eingänge fungieren. Dazu ist es daher notwendig, im für das Port B zuständigen Datenrichtungsregister DDRB folgende Bitkonfiguration einzutragen&lt;br /&gt;
&lt;br /&gt;
   +---+---+---+---+---+---+---+---+&lt;br /&gt;
   | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |&lt;br /&gt;
   +---+---+---+---+---+---+---+---+&lt;br /&gt;
   | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |&lt;br /&gt;
&lt;br /&gt;
In C liest sich das dann so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// in io.h wird u.a. DDRB definiert:&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  // Setzen der Bits 0,1,2,3 und 4&lt;br /&gt;
  // Binaer 00011111 = Hexadezimal 1F&lt;br /&gt;
  // direkte Zuweisung - standardkonform */&lt;br /&gt;
  DDRB = 0x1F;    /* &lt;br /&gt;
&lt;br /&gt;
  // Uebersichtliche Alternative - Binaerschreibweise, aber kein ISO-C&lt;br /&gt;
  DDRB = 0b00011111;&lt;br /&gt;
&lt;br /&gt;
  // Ausfuehrliche Schreibweise: identische Funktionalitaet, mehr Tipparbeit&lt;br /&gt;
  // aber uebersichtlicher und selbsterklaerend:&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; DDB0) | (1 &amp;lt;&amp;lt; DDB1) | (1 &amp;lt;&amp;lt; DDB2) | (1 &amp;lt;&amp;lt; DDB3) | (1 &amp;lt;&amp;lt; DDB4); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Pins 5 bis 7 werden (da 0) als Eingänge geschaltet. Weitere Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // Alle Pins des Ports B als Ausgang definieren:&lt;br /&gt;
  DDRB = 0xff; &lt;br /&gt;
  // Pin0 wieder auf Eingang und andere im urspruenglichen Zustand belassen:&lt;br /&gt;
  DDRB &amp;amp;= ~(1 &amp;lt;&amp;lt; DDB0);&lt;br /&gt;
  // Pin 3 und 4 auf Eingang und andere im urspruenglichen Zustand belassen:&lt;br /&gt;
  DDRB &amp;amp;= ~((1 &amp;lt;&amp;lt; DDB3) | (1 &amp;lt;&amp;lt; DDB4));&lt;br /&gt;
  // Pin 0 und 3 wieder auf Ausgang und andere im ursprünglichen Zustand belassen:&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; DDB0) | (1 &amp;lt;&amp;lt; DDB3);&lt;br /&gt;
  // Alle Pins auf Eingang:&lt;br /&gt;
  DDRB = 0x00;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vordefinierte Bitnummern für I/O-Register ==&lt;br /&gt;
&lt;br /&gt;
Die Bitnummern (z.&amp;amp;nbsp;B. PCx, PINCx und DDCx für den Port C) sind in den io*.h-Dateien der avr-libc definiert und dienen lediglich der besseren Lesbarkeit. Man muss diese Definitionen nicht verwenden oder kann auch einfach &amp;quot;immer&amp;quot; PAx, PBx, PCx usw. nutzen, auch wenn der Zugriff auf Bits in DDRx- oder PINx-Registern erfolgt. Für den Compiler sind die Ausdrücke (1&amp;lt;&amp;lt;PC7), (1&amp;lt;&amp;lt;DDC7) und (1&amp;lt;&amp;lt;PINC7) identisch zu (1&amp;lt;&amp;lt;7) (genauer: der Präprozessor ersetzt die Ausdrücke (1&amp;lt;&amp;lt;PC7),... zu (1&amp;lt;&amp;lt;7)). Ein Ausschnitt der Definitionen für Port C eines ATmega32 aus der iom32.h-Datei zur Verdeutlichung (analog für die weiteren Ports):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* PORTC */&lt;br /&gt;
#define PC7     7&lt;br /&gt;
#define PC6     6&lt;br /&gt;
#define PC5     5&lt;br /&gt;
#define PC4     4&lt;br /&gt;
#define PC3     3&lt;br /&gt;
#define PC2     2&lt;br /&gt;
#define PC1     1&lt;br /&gt;
#define PC0     0&lt;br /&gt;
&lt;br /&gt;
/* DDRC */&lt;br /&gt;
#define DDC7    7&lt;br /&gt;
#define DDC6    6&lt;br /&gt;
#define DDC5    5&lt;br /&gt;
#define DDC4    4&lt;br /&gt;
#define DDC3    3&lt;br /&gt;
#define DDC2    2&lt;br /&gt;
#define DDC1    1&lt;br /&gt;
#define DDC0    0&lt;br /&gt;
&lt;br /&gt;
/* PINC */&lt;br /&gt;
#define PINC7   7&lt;br /&gt;
#define PINC6   6&lt;br /&gt;
#define PINC5   5&lt;br /&gt;
#define PINC4   4&lt;br /&gt;
#define PINC3   3&lt;br /&gt;
#define PINC2   2&lt;br /&gt;
#define PINC1   1&lt;br /&gt;
#define PINC0   0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Digitale Signale ==&lt;br /&gt;
&lt;br /&gt;
Am einfachsten ist es, digitale Signale mit dem Mikrocontroller zu erfassen bzw. auszugeben.&lt;br /&gt;
&lt;br /&gt;
== Ausgänge ==&lt;br /&gt;
Will man als Ausgang definierte Pins (entsprechende DDRx-Bits = 1) auf Logisch 1 setzen, setzt man die  entsprechenden Bits im Portregister.&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    PORTB = 0x04; /* besser PORTB=(1&amp;lt;&amp;lt;PB2) */&lt;br /&gt;
&lt;br /&gt;
    // Uebersichtliche Alternative - Binaerschreibweise&lt;br /&gt;
    PORTB = 0b00000100;    /* direkte Zuweisung - uebersichtlich */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wird also der Ausgang an Pin PB2 gesetzt (Beachte, dass die Bits immer &#039;&#039;von 0 an&#039;&#039; gezählt werden, das niederwertigste Bit ist also Bitnummer 0 und nicht etwa Bitnummer 1).&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass bei der Zuweisung mittels &#039;&#039;&#039;=&#039;&#039;&#039; immer alle Pins gleichzeitig angegeben werden. Man sollte also, wenn nur bestimmte Ausgänge geschaltet werden sollen, zuerst den aktuellen Wert des Ports einlesen und das Bit des gewünschten Ports in diesen Wert einfließen lassen. Will man also nur den dritten Pin (Bit Nr. 2) an Port B auf &amp;quot;high&amp;quot; setzen und den Status der anderen Ausgänge unverändert lassen, nutze man diese Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    PORTB = PORTB | 0x04; /* besser: PORTB = PORTB | ( 1&amp;lt;&amp;lt;PB2 ) */&lt;br /&gt;
    /* vereinfacht durch Nutzung des |= Operators : */&lt;br /&gt;
    PORTB |= (1&amp;lt;&amp;lt;PB2);&lt;br /&gt;
&lt;br /&gt;
    /* auch mehrere &amp;quot;gleichzeitig&amp;quot;: */&lt;br /&gt;
    PORTB |= (1&amp;lt;&amp;lt;PB4) | (1&amp;lt;&amp;lt;PB5); /* Pins PB4 und PB5 &amp;quot;high&amp;quot; */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Ausschalten&amp;quot;, also  Ausgänge auf &amp;quot;low&amp;quot; setzen, erfolgt analog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    PORTB &amp;amp;= ~(1&amp;lt;&amp;lt;PB2); /* loescht Bit 2 in PORTB und setzt damit Pin PB2 auf low */ &lt;br /&gt;
    PORTB &amp;amp;= ~( (1&amp;lt;&amp;lt;PB4) | (1&amp;lt;&amp;lt;PB5) ); /* Pin PB4 und Pin PB5 &amp;quot;low&amp;quot; */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Siehe auch [[Bitmanipulation]]&lt;br /&gt;
&lt;br /&gt;
In Quellcodes, die für ältere Version den des avr-gcc/der avr-libc entwickelt wurden, werden einzelne Bits mittels der Funktionen sbi und cbi gesetzt bzw. gelöscht. Beide Funktionen sind in aktuellen Versionen der avr-libc nicht mehr enthalten und auch nicht mehr erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Falls der Anfangszustand von Ausgängen kritisch ist, muss die Reihenfolge beachtet werden, mit der die Datenrichtung (DDRx) eingestellt und der Ausgabewert (PORTx) gesetzt wird:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Für Ausgangspins, die mit Anfangswert &amp;quot;high&amp;quot; initialisiert werden sollen:&lt;br /&gt;
* zuerst die Bits im PORTx-Register setzen&lt;br /&gt;
* anschließend die Datenrichtung auf Ausgang stellen&lt;br /&gt;
&lt;br /&gt;
Daraus ergibt sich die Abfolge für einen Pin, der bisher als Eingang mit abgeschaltetem Pull-Up konfiguriert war:&lt;br /&gt;
* setze PORTx: interner Pull-Up aktiv&lt;br /&gt;
* setze DDRx: Ausgang (&amp;quot;high&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Bei der Reihenfolge erst DDRx und dann PORTx kann es zu einem kurzen &amp;quot;low-Puls&amp;quot; kommen, der auch externe Pull-Up-Widerstände &amp;quot;überstimmt&amp;quot;. Die (ungünstige) Abfolge: Eingang -&amp;gt; setze DDRx: Ausgang (auf &amp;quot;low&amp;quot;, da PORTx nach Reset 0) -&amp;gt; setze PORTx: Ausgang auf high. Vergleiche dazu auch das Datenblatt Abschnitt &#039;&#039;Configuring the Pin&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Eingänge (Wie kommen Signale in den &amp;amp;micro;C) ==&lt;br /&gt;
&lt;br /&gt;
Die digitalen Eingangssignale können auf verschiedene Arten zu unserer Logik gelangen.&lt;br /&gt;
&lt;br /&gt;
=== Signalkopplung ===&lt;br /&gt;
&lt;br /&gt;
Am einfachsten ist es, wenn die Signale direkt aus einer anderen digitalen Schaltung übernommen werden können. Hat der Ausgang der entsprechenden Schaltung TTL-Pegel dann können wir sogar direkt den Ausgang der Schaltung mit einem Eingangspin von unserem Controller verbinden.&lt;br /&gt;
&lt;br /&gt;
Hat der Ausgang der anderen Schaltung keinen TTL-Pegel so müssen wir den Pegel über entsprechende Hardware (z.&amp;amp;nbsp;B. Optokoppler, [[Widerstand#Spannungsteiler|Spannungsteiler]], &amp;quot;Levelshifter&amp;quot; aka [[Pegelwandler]]) anpassen.&lt;br /&gt;
&lt;br /&gt;
Die Masse der beiden Schaltungen muss selbstverständlich miteinander verbunden werden. Der Software selber ist es natürlich letztendlich egal, wie das Signal eingespeist wird. Wir können ja ohnehin lediglich prüfen, ob an einem Pin unseres Controllers eine logische 1 (Spannung größer ca. 0,7*Vcc) oder eine logische 0 (Spannung kleiner ca. 0,2*Vcc) anliegt. Detaillierte Informationen darüber, ab welcher Spannung ein Eingang als 0 (&amp;quot;low&amp;quot;) bzw. 1 (&amp;quot;high&amp;quot;) erkannt wird, liefert die Tabelle DC Characteristics im Datenblatt des genutzten Controllers.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:20em&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Logikpegel&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! VCC [V]&lt;br /&gt;
! Low [V]&lt;br /&gt;
! High [V]&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| 1,0 || 3,5&lt;br /&gt;
|-&lt;br /&gt;
! 3,3&lt;br /&gt;
| 0,66 || 2,3&lt;br /&gt;
|-&lt;br /&gt;
! 1,8&lt;br /&gt;
| 0,36 || 1,26 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Abfrage der Zustände der Portpins erfolgt direkt über den Registernamen.&lt;br /&gt;
&lt;br /&gt;
{{Warnung|Dabei ist wichtig, zur Abfrage der Eingänge &#039;&#039;nicht&#039;&#039; etwa Portregister &#039;&#039;&#039;PORTx&#039;&#039;&#039; zu verwenden, sondern Eingangsregister &#039;&#039;&#039;PINx&#039;&#039;&#039;. Ansonsten liest man nicht den Zustand der Eingänge, sondern den Status der internen Pull-Up-Widerstände. Die Abfrage der Pinzustände über PORTx statt PINx ist ein häufiger Fehler beim AVR-&amp;quot;Erstkontakt&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Will man also die aktuellen Signalzustände von Port D abfragen und in eine Variable namens bPortD abspeichern, schreibt man folgende Befehlszeilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
uint8_t bPortD;&lt;br /&gt;
...&lt;br /&gt;
bPortD = PIND;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit den C-Bitoperationen kann man den Status der Bits abfragen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* Fuehre Aktion aus, wenn Bit Nr. 1 (das &amp;quot;zweite&amp;quot; Bit) in PINC gesetzt (1) ist */&lt;br /&gt;
if ( PINC &amp;amp; (1&amp;lt;&amp;lt;PINC1) ) {&lt;br /&gt;
  /* Aktion */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fuehre Aktion aus, wenn Bit Nr. 2 (das &amp;quot;dritte&amp;quot; Bit) in PINB geloescht (0) ist */&lt;br /&gt;
if ( !(PINB &amp;amp; (1&amp;lt;&amp;lt;PINB2)) ) {&lt;br /&gt;
  /* Aktion */&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Siehe auch [[Bitmanipulation#Bits_prüfen]]&lt;br /&gt;
&lt;br /&gt;
=== Interne Pull-Up Widerstände ===&lt;br /&gt;
&lt;br /&gt;
Portpins für Ein- und Ausgänge (GPIO) eines AVR verfügen über zuschaltbare interne Pull-Up Widerstände (nominal mehrere 10kOhm, z.&amp;amp;nbsp;B. ATmega16 20-50kOhm). Diese können in vielen Fällen statt externer Widerstände genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Die internen Pull-Up Widerstände von Vcc zu den einzelnen Portpins werden über das Register &#039;&#039;&#039; PORTx&#039;&#039;&#039; aktiviert bzw. deaktiviert, wenn ein Pin als &#039;&#039;&#039; Eingang&#039;&#039;&#039; geschaltet ist.&lt;br /&gt;
&lt;br /&gt;
Wird der Wert des entsprechenden Portpins auf 1 gesetzt, so ist der Pull-Up Widerstand aktiviert. Bei einem Wert von 0 ist der Pull-Up Widerstand nicht aktiv. Man sollte jeweils entweder den internen oder einen externen Pull-Up Widerstand verwenden, aber nicht beide zusammen.&lt;br /&gt;
&lt;br /&gt;
Im Beispiel werden alle Pins des Ports D als Eingänge geschaltet und alle Pull-Up Widerstände aktiviert. Weiterhin wird Pin PC7 als Eingang geschaltet und dessen interner Pull-Up Widerstand aktiviert, ohne die Einstellungen für die anderen Portpins (PC0-PC6) zu verändern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
DDRD  = 0x00; /* alle Pins von Port D als Eingang */&lt;br /&gt;
PORTD = 0xff; /* interne Pull-Ups an allen Port-Pins aktivieren */&lt;br /&gt;
...&lt;br /&gt;
DDRC  &amp;amp;= ~(1&amp;lt;&amp;lt;PC7);  /* Pin PC7 als Eingang */&lt;br /&gt;
PORTC |= (1&amp;lt;&amp;lt;PC7);    /* internen Pull-Up an PC7 aktivieren */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Taster und Schalter ===&lt;br /&gt;
&lt;br /&gt;
Der Anschluss mechanischer Kontakte an den Mikrocontroller, ist zwischen zwei unterschiedliche Methoden zu unterscheiden: &#039;&#039;Active Low&#039;&#039; und &#039;&#039;Active High&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; caption=&amp;quot;Anschluss mechanischer Kontakte an einen µC&amp;quot;&amp;gt;&lt;br /&gt;
Image:Active Low.gif|&#039;&#039;&#039;Active Low:&#039;&#039;&#039; Bei dieser Methode wird der Kontakt zwischen den Eingangspin des Controllers und Masse geschaltet. Damit bei offenem Schalter der Controller kein undefiniertes Signal bekommt, wird zwischen die Versorgungsspannung und den Eingangspin ein sogenannter &#039;&#039;&#039;Pull-Up&#039;&#039;&#039; Widerstand geschaltet. Dieser dient dazu, den Pegel bei geöffnetem Schalter auf logisch 1 zu ziehen.&lt;br /&gt;
Image:Active High.gif|&#039;&#039;&#039;Active High:&#039;&#039;&#039; Hier wird der Kontakt zwischen die Versorgungsspannung und den Eingangspin geschaltet. Damit bei offener Schalterstellung kein undefiniertes Signal am Controller ansteht, wird zwischen den Eingangspin und die Masse ein &#039;&#039;&#039;Pull-Down&#039;&#039;&#039; Widerstand geschaltet. Dieser dient dazu, den Pegel bei geöffneter Schalterstellung auf logisch 0 zu halten. &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Widerstandswert von Pull-Up- und Pull-Down-Widerständen ist an sich nicht kritisch. Wird er allerdings zu hoch gewählt, ist die Wirkung eventuell nicht gegeben. Als üblicher Wert haben sich 10 kOhm eingebürgert. Die AVRs verfügen an den meisten Pins über zuschaltbare interne Pull-Up Widerstände (vgl. Abschnitt [[AVR-GCC-Tutorial#Interne Pull-Up Widerstände|Interne Pull-Up Widerstände]]), welche insbesondere wie hier bei Tastern und ähnlichen Bauteilen (z.&amp;amp;nbsp;B. Drehgebern) statt externer Bauteile verwendet werden können. Interne Pull-Down-Widerstand sind nicht verfügbar und müssen daher in Form zusätzlicher Bauteile in die Schaltung eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
==== Taster entprellen ====&lt;br /&gt;
&lt;br /&gt;
Siehe: &#039;&#039;[[Entprellung#Warteschleifen-Verfahren|Entprellung: Warteschleifen-Verfahren]]&lt;br /&gt;
&lt;br /&gt;
= Warteschleifen (delay.h) =&lt;br /&gt;
&lt;br /&gt;
Der Programmablauf kann verschiedene Arten von Wartefunktionen erfordern:&lt;br /&gt;
&lt;br /&gt;
* Warten im Sinn von Zeitvertrödeln&lt;br /&gt;
* Warten auf einen bestimmten Zustand an den I/O-Pins&lt;br /&gt;
* Warten auf einen bestimmten Zeitpunkt (siehe Timer)&lt;br /&gt;
* Warten auf einen bestimmten Zählerstand (siehe Counter)&lt;br /&gt;
&lt;br /&gt;
Der einfachste Fall, das Zeitvertrödeln, kann in vielen Fällen und mit großer Genauigkeit anhand der avr-libc Bibliotheksfunktionen _delay_ms() und _delay_us() erledigt werden. Die Bibliotheksfunktionen sind einfachen Zählschleifen (Warteschleifen) vorzuziehen, da leere Zählschleifen ohne besondere Vorkehrungen sonst bei eingeschalteter Optimierung vom avr-gcc-Compiler wegoptimiert werden. Weiterhin sind die Bibliotheksfunktionen bereits darauf vorbereitet, die in F_CPU definierte Taktfrequenz zu verwenden. Außerdem sind die Funktionen der Bibliothek wirklich getestet.&lt;br /&gt;
&lt;br /&gt;
Einfach!? Schon, aber während gewartet wird, macht der µC nichts anderes mehr (abgesehen von möglicherweise auftretenden Interrupts, falls welche aktiviert sind). Die Wartefunktion blockiert den Programmablauf. Möchte man einerseits warten, um z.&amp;amp;nbsp;B. eine LED blinken zu lassen und gleichzeitig andere Aktionen ausführen z.&amp;amp;nbsp;B. weitere LED bedienen, sollten die Timer/Counter des AVR verwendet werden, siehe Artikel [[Multitasking]].&lt;br /&gt;
&lt;br /&gt;
Die Bibliotheksfunktionen funktionieren allerdings nur dann korrekt, wenn sie mit zur Übersetzungszeit (beim Compilieren) bekannten konstanten Werten aufgerufen werden. Der Quellcode muss mit eingeschalteter Optimierung übersetzt werden, sonst wird sehr viel Maschinencode erzeugt, und die Wartezeiten stimmen nicht mehr mit dem Parameter überein.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Einschränkung liegt darin, daß sie möglicherweise länger warten, als erwartet, nämlich in dem Fall, daß Interrupts auftreten und die _delay...()-Funktion unterbrechen. Genau genommen warten diese nämlich nicht eine bestimmte Zeit, sondern verbrauchen eine bestimmte Anzahl von Prozessortakten. Die wiederum ist so bemessen, daß ohne Unterbrechung durch Interrupts die gewünschte Wartezeit erreicht wird.&lt;br /&gt;
Wird das Warten aber durch eine oder mehrere ISR unterbrochen, die zusammen 1% Prozessorzeit verbrauchen, dann dauert das Warten etwa 1% länger. Bei 50% Last durch die ISR dauert das Warten doppelt solange wie gewünscht, bei 90% zehnmal solange...&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Version der Bibliothek verhalten sich die Bibliotheksfunktionen etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
== avr-libc Versionen bis 1.6 ==&lt;br /&gt;
&lt;br /&gt;
Die Wartezeit der Funktion _delay_ms() ist auf 262,14ms/F_CPU (in MHz) begrenzt, d.h. bei 20 MHz kann man nur max. 13,1ms warten. Die Wartezeit der Funktion _delay_us() ist auf 768us/F_CPU (in MHz) begrenzt, d.h. bei 20 MHz kann man nur max. 38,4µs warten. Längere Wartezeiten müssen dann über einen mehrfachen Aufruf in einer Schleife gelöst werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Blinken einer LED an PORTB Pin PB0 im ca. 1s Rhythmus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert &lt;br /&gt;
   (z.&amp;amp;nbsp;B. durch Übergabe als Parameter zum Compiler innerhalb &lt;br /&gt;
   des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die&lt;br /&gt;
   &amp;quot;nachträgliche&amp;quot; Definition hinweist */&lt;br /&gt;
#warning &amp;quot;F_CPU war noch nicht definiert, wird nun mit 3686400 definiert&amp;quot;&lt;br /&gt;
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;     /* in älteren avr-libc Versionen &amp;lt;avr/delay.h&amp;gt; */ &lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 lange, variable Verzögerungszeit, Einheit in Millisekunden&lt;br /&gt;
&lt;br /&gt;
Die maximale Zeit pro Funktionsaufruf ist begrenzt auf &lt;br /&gt;
262.14 ms / F_CPU in MHz (im Beispiel: &lt;br /&gt;
262.1 / 3.6864 = max. 71 ms) &lt;br /&gt;
&lt;br /&gt;
Daher wird die kleine Warteschleife mehrfach aufgerufen,&lt;br /&gt;
um auf eine längere Wartezeit zu kommen. Die zusätzliche &lt;br /&gt;
Prüfung der Schleifenbedingung lässt die Wartezeit geringfügig&lt;br /&gt;
ungenau werden (macht hier vielleicht 2-3ms aus).&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
void long_delay(uint16_t ms)&lt;br /&gt;
{&lt;br /&gt;
    for(; ms&amp;gt;0; ms--) _delay_ms(1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
    DDRB = ( 1 &amp;lt;&amp;lt; PB0 );        // PB0 an PORTB als Ausgang setzen&lt;br /&gt;
&lt;br /&gt;
    while( 1 )                  // Endlosschleife&lt;br /&gt;
    {                &lt;br /&gt;
        PORTB ^= ( 1 &amp;lt;&amp;lt; PB0 );  // Toggle PB0 z.&amp;amp;nbsp;B. angeschlossene LED&lt;br /&gt;
        long_delay(1000);       // Eine Sekunde warten...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== avr-libc Versionen ab 1.7 ==&lt;br /&gt;
&lt;br /&gt;
_delay_ms() kann mit einem Argument bis 6553,5 ms (= 6,5535 Sekunden) benutzt werden. Es ist nicht möglich, eine Variable als Argument zu übergeben. Wird die früher gültige Grenze von 262,14 ms/F_CPU (in MHz) überschritten, so arbeitet _delay_ms() einfach etwas ungenauer und zählt nur noch mit einer Auflösung von 1/10 ms. Eine Verzögerung von 1000,10 ms ließe sich nicht mehr von einer von 1000,19 ms unterscheiden. Ein Verlust, der sich im Allgemeinen verschmerzen lässt. Dem Programmierer wird keine Rückmeldung gegeben, dass die Funktion ggf. gröber arbeitet, d.h. wenn es darauf ankommt, bitte den Parameter wie bisher geschickt wählen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion _delay_us() wurde ebenfalls erweitert. Wenn deren maximal als genau behandelbares Argument überschritten wird, benutzt diese intern _delay_ms(). Damit gelten in diesem Fall die _delay_ms() Einschränkungen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Blinken einer LED an PORTB Pin PB0 im ca. 1s Rhythmus, avr-libc ab Version 1.6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert &lt;br /&gt;
   (z.B. durch Übergabe als Parameter zum Compiler innerhalb &lt;br /&gt;
   des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die&lt;br /&gt;
   &amp;quot;nachträgliche&amp;quot; Definition hinweist */&lt;br /&gt;
#warning &amp;quot;F_CPU war noch nicht definiert, wird nun mit 3686400 definiert&amp;quot;&lt;br /&gt;
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
    DDRB = ( 1 &amp;lt;&amp;lt; PB0 );        // PB0 an PORTB als Ausgang setzen&lt;br /&gt;
&lt;br /&gt;
    while( 1 ) {                // Endlosschleife&lt;br /&gt;
        PORTB ^= ( 1 &amp;lt;&amp;lt; PB0 );  // Toggle PB0 z.B. angeschlossene LED&lt;br /&gt;
        _delay_ms(1000);        // Eine Sekunde +/-1/10000 Sekunde warten...&lt;br /&gt;
                                // funktioniert nicht mit Bibliotheken vor 1.6&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die _delay_ms() und die _delay_us aus &#039;&#039;&#039;avr-libc 1.7.0&#039;&#039;&#039; sind fehlerhaft. _delay_ms () läuft 4x schneller als erwartet. Abhilfe ist eine korrigierte Includedatei: [http://www.mikrocontroller.net/topic/196738#1943039]&lt;br /&gt;
&lt;br /&gt;
= Programmieren mit Interrupts =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin:2em;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:Interrupt Programme.gif]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Nachdem wir nun alles Wissenswerte für die serielle Programmerstellung&lt;br /&gt;
gelernt haben nehmen wir jetzt ein völlig anderes Thema in Angriff, nämlich&lt;br /&gt;
die Programmierung unter Zuhilfenahme der Interrupts des AVR.&lt;br /&gt;
&lt;br /&gt;
Tritt ein Interrupt auf, unterbricht (engl. interrupts) der Controller die Verarbeitung des Hauptprogramms und verzweigt zu einer Interruptroutine. Das Hauptprogramm wird also beim Eintreffen eines Interrupts unterbrochen, die Interruptroutine ausgeführt und danach erst wieder das Hauptprogramm an der Unterbrechungsstelle fortgesetzt (vgl. die Abbildung).&lt;br /&gt;
&lt;br /&gt;
Um Interrupts verarbeiten zu können, ist folgendes zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Für jede aktivierte Interruptquelle ist eine Funktion zu programmieren, in der die beim Auftreten des jeweiligen Interrupts erforderlichen Verarbeitungsschritte enthalten sind. Für diese Funktion existieren verschiedene Bezeichnungen. Üblich sind die englischen Begriffe Interrupt-Handler oder Interrupt-Service-Routinen (ISR), man findet aber auch die Bezeichnungen Interruptverarbeitungs- oder -behandlungsroutine oder auch kurz Interruptroutine. Zum Beispiel wird üblicherweise in der ISR zur Verarbeitung des Empfangsinterrupts eines UARTs (UART-RX Interrupt) das empfangene Zeichen in einen Zwischenspeicher (FIFO-Buffer) kopiert, dessen Inhalt später von anderen Programmteilen geleert wird. Sofern der Zwischenspeicher ausreichend groß ist, geht also kein Zeichen verloren, auch wenn im Hauptprogramm zeitintensive Operationen durchgeführt werden.&lt;br /&gt;
* Die benötigten Interrupts sind in den jeweiligen Funktionsbausteinen einzuschalten. Dies erfolgt über das jeweilige Aktivierungsbit (Interrupt Enable) in einem der Hardwareregister (z.B. RX(Complete)Interrupt Enable eines UARTs)&lt;br /&gt;
* Sämtliche Interrupts werden über einen weiteren globalen Schalter aktiviert und deaktiviert. Zur Verarbeitung der Interrupts ist dieser Schalter zu aktivieren (sei(), siehe unten).&lt;br /&gt;
 &lt;br /&gt;
Alle Punkte sind zu beachten. Fehlt z.B. die globale Aktivierung, werden Interruptroutinen auch dann nicht aufgerufen, wenn sie im Funktionsbaustein eingeschaltet sind und eine Behandlungsroutine verhanden ist.&lt;br /&gt;
&lt;br /&gt;
Siehe auch&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235092.html#new Ausführlicher Thread im Forum]&lt;br /&gt;
* Artikel [[Interrupt]]&lt;br /&gt;
* Artikel [[Multitasking]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Anforderungen an Interrupt-Routinen ==&lt;br /&gt;
&lt;br /&gt;
Um unliebsamen Überraschungen vorzubeugen, sollten einige Grundregeln bei der Implementierung der Interruptroutinen beachtet werden. Interruptroutinen sollten möglichst kurz und schnell abarbeitbar sein, daraus folgt:&lt;br /&gt;
&lt;br /&gt;
* Keine umfangreichen Berechnungen innerhalb der Interruptroutine. (*)&lt;br /&gt;
* Keine langen Programmschleifen.&lt;br /&gt;
* Obwohl es möglich ist, während der Abarbeitung einer Interruptroutine andere oder sogar den gleichen Interrupt wieder zuzulassen, wird davon ohne genaue Kenntnis der internen Abläufe dringend abgeraten.&lt;br /&gt;
&lt;br /&gt;
Interruptroutinen (ISRs) sollten also möglichst kurz sein und keine Schleifen mit vielen Durchläufen enthalten. Längere Operationen können meist in einen &amp;quot;Interrupt-Teil&amp;quot; in einer ISR und einen &amp;quot;Arbeitsteil&amp;quot; im Hauptprogramm aufgetrennt werden. Z.B. Speichern des Zustands aller Eingänge im EEPROM in bestimmten Zeitabständen: ISR-Teil: Zeitvergleich (Timer,RTC) mit Logzeit/-intervall. Bei Übereinstimmung ein globales Flag setzen (volatile bei Flag-Deklaration nicht vergessen, s.u.). Dann im Hauptprogramm prüfen, ob das Flag gesetzt ist. Wenn ja: die Daten im EEPROM ablegen und Flag löschen.&lt;br /&gt;
&lt;br /&gt;
(*)&lt;br /&gt;
Hinweis: &lt;br /&gt;
Es gibt allerdings die seltene Situation, dass man gerade eingelesene&lt;br /&gt;
ADC-Werte sofort verarbeiten muss. Besonders dann, wenn man mehrere Werte sehr&lt;br /&gt;
schnell hintereinander bekommt. Dann bleibt einem nichts anderes übrig, als die&lt;br /&gt;
Werte noch in der ISR zu verarbeiten. Kommt aber sehr selten vor und sollte&lt;br /&gt;
durch geeignete Wahl des Systemtaktes bzw. Auswahl des Controllers vermieden werden!&lt;br /&gt;
&lt;br /&gt;
== Interrupt-Quellen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Ereignisse können einen Interrupt auf einem AVR AT90S2313 auslösen, wobei die Reihenfolge der Auflistung auch die Priorität der Interrupts aufzeigt.&lt;br /&gt;
&lt;br /&gt;
* Reset&lt;br /&gt;
* Externer Interrupt 0&lt;br /&gt;
* Externer Interrupt 1&lt;br /&gt;
* Timer/Counter 1 Capture Ereignis&lt;br /&gt;
* Timer/Counter 1 Compare Match&lt;br /&gt;
* Timer/Counter 1 Überlauf&lt;br /&gt;
* Timer/Counter 0 Überlauf&lt;br /&gt;
* UART Zeichen empfangen&lt;br /&gt;
* UART Datenregister leer&lt;br /&gt;
* UART Zeichen gesendet&lt;br /&gt;
* Analoger Komparator&lt;br /&gt;
&lt;br /&gt;
Die Anzahl der möglichen Interruptquellen variiert zwischen den verschiedenen Microcontroller-Typen. Im Zweifel hilft ein Blick ins Datenblatt (&amp;quot;Interrupt Vectors&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Register ==&lt;br /&gt;
&lt;br /&gt;
Der AT90S2313 verfügt über 2 Register die mit den&lt;br /&gt;
Interrupts zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!width=&amp;quot;10%&amp;quot;| GIMSK&lt;br /&gt;
| &#039;&#039;&#039;G&#039;&#039;&#039;eneral &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;M&#039;&#039;&#039;a&#039;&#039;&#039;sk&#039;&#039;&#039; Register.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit &lt;br /&gt;
| 7 || 6|| 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;INT1&#039;&#039;&#039; || &#039;&#039;&#039;INT0&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R || R || R || R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INT1&#039;&#039;&#039; (External &#039;&#039;&#039;Int&#039;&#039;&#039;errupt Request &#039;&#039;&#039;1&#039;&#039;&#039; Enable)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird ein Interrupt ausgelöst, wenn am &#039;&#039;&#039;INT1&#039;&#039;&#039;-Pin eine steigende oder fallende (je nach Konfiguration im &#039;&#039;&#039;MCUCR&#039;&#039;&#039;) Flanke erkannt wird.&lt;br /&gt;
:Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
:Der Interrupt wird auch ausgelöst, wenn der Pin als Ausgang geschaltet ist. Auf diese Weise bietet sich die Möglichkeit, Software-Interrupts zu realisieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INT0&#039;&#039;&#039; (External &#039;&#039;&#039;Int&#039;&#039;&#039;errupt Request &#039;&#039;&#039;0&#039;&#039;&#039; Enable)&lt;br /&gt;
:Wenn dieses Bit gesetzt ist, wird ein Interrupt ausgelöst, wenn am &#039;&#039;&#039;INT0&#039;&#039;&#039;-Pin eine steigende oder fallende (je nach Konfiguration im &#039;&#039;&#039;MCUCR&#039;&#039;&#039;) Flanke erkannt wird.&lt;br /&gt;
:Das Global Enable Interrupt Flag muss selbstverständlich auch gesetzt sein.&lt;br /&gt;
:Der Interrupt wird auch ausgelöst, wenn der Pin als Ausgang geschaltet ist. Auf diese Weise bietet sich die Möglichkeit, Software-Interrupts zu realisieren.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! GIFR&lt;br /&gt;
| &#039;&#039;&#039;G&#039;&#039;&#039;eneral &#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;F&#039;&#039;&#039;lag &#039;&#039;&#039;R&#039;&#039;&#039;egister.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;INTF1&#039;&#039;&#039; || &#039;&#039;&#039;INTF0&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039; || &#039;&#039;&#039;-&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R/W || R/W || R || R || R || R || R || R&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTF1&#039;&#039;&#039; (External &#039;&#039;&#039;Int&#039;&#039;&#039;errupt Flag &#039;&#039;&#039;1&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn am &#039;&#039;&#039;INT1&#039;&#039;&#039;-Pin eine Interrupt-Bedingung, entsprechend der Konfiguration, als eingetreten erkannt wird. Wenn das Global Enable Interrupt Flag gesetzt ist, wird die Interruptroutine angesprungen.&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn die Interruptroutine beendet ist. Alternativ kann das Flag gelöscht werden, indem der Wert &#039;&#039;&#039;1(!)&#039;&#039;&#039; eingeschrieben wird.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTF0&#039;&#039;&#039; (External &#039;&#039;&#039;Int&#039;&#039;&#039;errupt Flag &#039;&#039;&#039;0&#039;&#039;&#039;)&lt;br /&gt;
:Dieses Bit wird gesetzt, wenn am &#039;&#039;&#039;INT0&#039;&#039;&#039;-Pin eine Interrupt-Bedingung, entsprechend der Konfiguration, als eingetreten erkannt wird. Wenn das Global Enable Interrupt Flag gesetzt ist, wird die Interruptroutine angesprungen.&lt;br /&gt;
:Das Flag wird automatisch gelöscht, wenn die Interruptroutine beendet ist. Alternativ kann das Flag gelöscht werden, indem der Wert &#039;&#039;&#039;1(!)&#039;&#039;&#039; eingeschrieben wird.&lt;br /&gt;
|- &lt;br /&gt;
! MCUCR&lt;br /&gt;
| &#039;&#039;&#039;MCU&#039;&#039;&#039; &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;R&#039;&#039;&#039;egister.&lt;br /&gt;
&lt;br /&gt;
Das MCU Control Register enthält Kontrollbits für allgemeine MCU-Funktionen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;-&#039;&#039;&#039;|| &#039;&#039;&#039;SE&#039;&#039;&#039;|| &#039;&#039;&#039;SM&#039;&#039;&#039;|| &#039;&#039;&#039;ISC11&#039;&#039;&#039;|| &#039;&#039;&#039;ISC10&#039;&#039;&#039;|| &#039;&#039;&#039;ISC01&#039;&#039;&#039;|| &#039;&#039;&#039;ISC00&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
! R/W&lt;br /&gt;
| R || R || R/W || R/W || R/W || R/W || R/W || R/W&lt;br /&gt;
|- &lt;br /&gt;
! Initialwert&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SE&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;leep &#039;&#039;&#039;E&#039;&#039;&#039;nable)&lt;br /&gt;
:Dieses Bit muss gesetzt sein, um den Controller mit dem &#039;&#039;&#039;SLEEP&#039;&#039;&#039;-Befehl in den Schlafzustand versetzen zu können.&lt;br /&gt;
:Um den Schlafmodus nicht irrtümlich einzuschalten, wird empfohlen, das Bit erst unmittelbar vor Ausführung des &#039;&#039;&#039;SLEEP&#039;&#039;&#039;-Befehls zu setzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;leep &#039;&#039;&#039;M&#039;&#039;&#039;ode)&lt;br /&gt;
:Dieses Bit bestimmt über den Schlafmodus.&lt;br /&gt;
:Ist das Bit gelöscht, so wird der &#039;&#039;&#039;Idle&#039;&#039;&#039;-Modus ausgeführt. Ist das Bit gesetzt, so wird der &#039;&#039;&#039;Power-Down&#039;&#039;&#039;-Modus ausgeführt. (für andere AVR Controller siehe Abschnitt &amp;quot;Sleep-Mode&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ISC11&#039;&#039;&#039;, &#039;&#039;&#039;ISC10&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;S&#039;&#039;&#039;ense &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;1&#039;&#039;&#039; Bits)&lt;br /&gt;
:Diese beiden Bits bestimmen, ob die steigende oder die fallende Flanke für die Interrupterkennung am &#039;&#039;&#039;INT1&#039;&#039;&#039;-Pin ausgewertet wird.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!width=&amp;quot;10%&amp;quot;| ISC11 ||width=&amp;quot;10%&amp;quot;| ISC10 || Bedeutung&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Low Level an &#039;&#039;&#039;INT1&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
&lt;br /&gt;
Der Interrupt wird getriggert, solange der Pin auf 0 bleibt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Reserviert&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Die fallende Flanke an &#039;&#039;&#039;INT1&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Die steigende Flanke an &#039;&#039;&#039;INT1&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ISC01&#039;&#039;&#039;, &#039;&#039;&#039;ISC00&#039;&#039;&#039; (&#039;&#039;&#039;I&#039;&#039;&#039;nterrupt &#039;&#039;&#039;S&#039;&#039;&#039;ense &#039;&#039;&#039;C&#039;&#039;&#039;ontrol &#039;&#039;&#039;0&#039;&#039;&#039; Bits)&lt;br /&gt;
:Diese beiden Bits bestimmen, ob die steigende oder die fallende Flanke für die Interrupterkennung am &#039;&#039;&#039;INT0&#039;&#039;&#039;-Pin ausgewertet wird.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!width=&amp;quot;10%&amp;quot;| ISC01 ||width=&amp;quot;10%&amp;quot;| ISC00 || Bedeutung&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Low Level an &#039;&#039;&#039;INT0&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
&lt;br /&gt;
Der Interrupt wird getriggert, solange der Pin auf 0 bleibt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Reserviert&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0&lt;br /&gt;
| Die fallende Flanke an &#039;&#039;&#039;INT0&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Die steigende Flanke an &#039;&#039;&#039;INT0&#039;&#039;&#039; erzeugt einen Interrupt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Allgemeines über die Interrupt-Abarbeitung ==&lt;br /&gt;
&lt;br /&gt;
Wenn ein Interrupt eintrifft, wird automatisch das &#039;&#039;&#039;Global Interrupt Enable&#039;&#039;&#039; Bit im Status Register &#039;&#039;&#039;SREG&#039;&#039;&#039; gelöscht und alle weiteren Interrupts unterbunden. Dieses wird automatisch wieder gesetzt, wenn die Interruptroutine beendet wird. Wenn in der Zwischenzeit weitere Interrupts eintreffen, werden die zugehörigen Interrupt-Bits gesetzt und die Interrupts bei Beendigung der laufenden Interrupt-Routine in der Reihenfolge ihrer Priorität ausgeführt. Dies kann&lt;br /&gt;
eigentlich nur dann zu Problemen führen, wenn ein hoch priorisierter Interrupt ständig und in kurzer Folge auftritt. Dieser sperrt dann möglicherweise alle anderen Interrupts mit niedrigerer Priorität. Dies ist einer der Gründe, weshalb die Interrupt-Routinen sehr kurz gehalten werden sollen.  Es ist möglich das GIE-Bit in der ISR zu setzen und so schon wieder weitere Interrupts zuzulassen - allerdings sollte man damit vorsichtig sein und genau wissen was man damit macht. Kritisch wird es vor allem wenn der gleiche Interrupt noch einmal kommt, bevor die ISR abgearbeitet ist. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Das Status-Register ===&lt;br /&gt;
&lt;br /&gt;
Es gilt auch zu beachten, dass das Status-Register während der Abarbeitung einer Interruptroutine nicht automatisch gesichert wird. Falls notwendig, muss dies vom Programmierer selber vorgesehen werden. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interrupts mit avr-gcc ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &#039;&#039;Anmerkung eines Nutzers: Ich habe mir das Thema hier angearbeitet und hatte am Anfang starke Probleme: Jeder Interrupt muss nochmals einzeln aktiviert werden. Es reicht nicht nur per &#039;&#039;sei()&#039;&#039; die Interrupts global zu aktiveren.&#039;&#039; - mthomas: Hoffentlich duch die modifizerte Einleitung etwas offensichtlicher erläutert. Ansonsten bitte per Eintrag auf die Diskussionseite nochmals melden) --&amp;gt; &lt;br /&gt;
&amp;lt;!-- Selbstverständlich können alle interruptspezifischen Registerzugriffe wie gewohnt über I/O-Adressierung vorgenommen werden. Etwas einfacher geht es jedoch, wenn wir die vom Compiler zur Verfügung gestellten Mittel einsetzen.--&amp;gt;&lt;br /&gt;
Funktionen zur Interrupt-Verarbeitung werden in den Includedateien &#039;&#039;interrupt.h&#039;&#039;  der avr-libc zur Verfügung gestellt (bei älterem Quellcode zusätzlich &#039;&#039;signal.h&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// fuer sei(), cli() und ISR():&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Makro &#039;&#039;&#039;sei()&#039;&#039;&#039; schaltet die Interrupts ein. Eigentlich wird nichts anderes gemacht, als das &#039;&#039;&#039;Global Interrupt Enable&#039;&#039;&#039; Bit im Status Register gesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    sei();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Makro &#039;&#039;&#039;cli()&#039;&#039;&#039; schaltet die Interrupts aus, oder anders gesagt, das &#039;&#039;&#039;Global Interrupt Enable&#039;&#039;&#039; Bit im Status Register wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    cli();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oft steht man vor der Aufgabe, dass eine Codesequenz nicht unterbrochen werden darf. Es liegt dann nahe, zu Beginn dieser Sequenz ein cli() und am Ende ein sei() einzufügen. Dies ist jedoch ungünstig, wenn die Interrupts vor Aufruf der Sequenz deaktiviert waren und danach auch weiterhin deaktiviert bleiben sollen. Ein sei() würde ungeachtet des vorherigen  Zustands die Interrupts aktivieren, was zu unerwünschten Seiteneffekten führen kann. Die aus dem folgenden Beispiel ersichtliche Vorgehensweise ist in solchen Fällen vorzuziehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
void NichtUnterbrechenBitte(void)&lt;br /&gt;
{&lt;br /&gt;
   uint8_t tmp_sreg;  // temporaerer Speicher fuer das Statusregister&lt;br /&gt;
&lt;br /&gt;
   tmp_sreg = SREG;   // Statusregister (also auch das I-Flag darin) sichern&lt;br /&gt;
   cli();             // Interrupts global deaktivieren&lt;br /&gt;
&lt;br /&gt;
   /* hier &amp;quot;unterbrechnungsfreier&amp;quot; Code */&lt;br /&gt;
&lt;br /&gt;
   /* Beispiel Anfang&lt;br /&gt;
     JTAG-Interface eines ATmega16 per Software deaktivieren &lt;br /&gt;
     und damit die JTAG-Pins an PORTC für &amp;quot;general I/O&amp;quot; nutzbar machen&lt;br /&gt;
     ohne die JTAG-Fuse-Bit zu aendern. Dazu ist eine &amp;quot;timed sequence&amp;quot;&lt;br /&gt;
     einzuhalten (vgl Datenblatt ATmega16, Stand 10/04, S. 229): &lt;br /&gt;
     Das JTD-Bit muss zweimal innerhalb von 4 Taktzyklen geschrieben &lt;br /&gt;
     werden. Ein Interrupt zwischen den beiden Schreibzugriffen wuerde &lt;br /&gt;
     die erforderliche Sequenz &amp;quot;brechen&amp;quot;, das JTAG-Interface bliebe&lt;br /&gt;
     weiterhin aktiv und die IO-Pins weiterhin für JTAG reserviert. */&lt;br /&gt;
&lt;br /&gt;
   MCUCSR |= (1&amp;lt;&amp;lt;JTD);&lt;br /&gt;
   MCUCSR |= (1&amp;lt;&amp;lt;JTD); // 2 mal in Folge ,vgl. Datenblatt fuer mehr Information&lt;br /&gt;
&lt;br /&gt;
   /* Beispiel Ende */&lt;br /&gt;
  &lt;br /&gt;
   SREG = tmp_sreg;     // Status-Register wieder herstellen &lt;br /&gt;
                      // somit auch das I-Flag auf gesicherten Zustand setzen&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void NichtSoGut(void)&lt;br /&gt;
{&lt;br /&gt;
   cli();&lt;br /&gt;
   &lt;br /&gt;
   /* hier &amp;quot;unterbrechnungsfreier&amp;quot; Code */&lt;br /&gt;
   &lt;br /&gt;
   sei();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   //...&lt;br /&gt;
&lt;br /&gt;
   cli();  &lt;br /&gt;
   // Interrupts global deaktiviert &lt;br /&gt;
&lt;br /&gt;
   NichtUnterbrechenBitte();&lt;br /&gt;
   // auch nach Aufruf der Funktion deaktiviert&lt;br /&gt;
&lt;br /&gt;
   sei();&lt;br /&gt;
   // Interrupts global aktiviert &lt;br /&gt;
&lt;br /&gt;
   NichtUnterbrechenBitte();&lt;br /&gt;
   // weiterhin aktiviert&lt;br /&gt;
   //...&lt;br /&gt;
&lt;br /&gt;
   /* Verdeutlichung der unguenstigen Vorgehensweise mit cli/sei: */&lt;br /&gt;
   cli();  &lt;br /&gt;
   // Interrupts jetzt global deaktiviert &lt;br /&gt;
&lt;br /&gt;
   NichtSoGut();&lt;br /&gt;
   // nach Aufruf der Funktion sind Interrupts global aktiviert &lt;br /&gt;
   // dies ist mglw. ungewollt!&lt;br /&gt;
   //...&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- mt: besser so nicht(?), lieber &amp;quot;datenblattkonform&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;&#039;&#039;&#039;timer_enable_int (unsigned char ints);&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;/font&amp;gt;Schaltet Timerbezogene Interrupts ein bzw. aus.&amp;lt;br /&amp;gt;&lt;br /&gt;
Wenn als Argument &#039;&#039;&#039;ints&#039;&#039;&#039; der Wert 0 übergeben wird so werden alle&lt;br /&gt;
Timerinterrupts ausgeschaltet, ansonsten muss in &#039;&#039;&#039;ints&#039;&#039;&#039; angegeben werden,&lt;br /&gt;
welche Interrupts zu aktivieren sind. Dabei müssen einfach die entsprechend zu&lt;br /&gt;
setzenden Bits definiert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel: &#039;&#039;&#039;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;timer_enable_int (1 &amp;lt;&amp;lt; TOIE1));&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&#039;&#039;&#039;Achtung: Wenn ein Timerinterrupt eingeschaltet wird während ein&lt;br /&gt;
anderer Timerinterrupt bereits läuft, dann müssen beide Bits angegeben werden&lt;br /&gt;
sonst wird der andere Timerinterrupt versehentlich ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;&#039;&#039;&#039;enable_external_int (unsigned char ints);&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;/font&amp;gt;Schaltet die externen Interrupts ein bzw. aus.&amp;lt;br /&amp;gt;&lt;br /&gt;
Wenn als Argument &#039;&#039;&#039;ints&#039;&#039;&#039; der Wert 0 übergeben wird so werden alle externen&lt;br /&gt;
Interrrups ausgeschaltet, ansonsten muss in &#039;&#039;&#039;ints&#039;&#039;&#039; angegeben werden, welche&lt;br /&gt;
Interrupts zu aktivieren sind. Dabei müssen einfach die entsprechend zu&lt;br /&gt;
setzenden Bits definiert werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel: &#039;&#039;&#039;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;enable_external_int ((1&amp;lt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&#039;&#039;&#039;Schaltet die externen Interrupts 0 und 1 ein.&lt;br /&gt;
&lt;br /&gt;
Nachdem nun die Interrupts aktiviert sind, braucht es selbstverständlich noch den auszuführenden Code, der ablaufen soll, wenn ein Interrupt eintrifft.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Zu den aktivierten Interrupts ist eine Funktion zu programmieren, deren Code aufgerufen wird, wenn der betreffende Interrupt auftritt (Interrupt-Handler, Interrupt-Service-Routine). Dazu existiert die Definition (ein Makro) &#039;&#039;&#039;ISR&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== ISR ===&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;ISR()&#039;&#039; ersetzt bei neueren Versionen der avr-libc &#039;&#039;SIGNAL()&#039;&#039;. SIGNAL sollte nicht mehr genutzt werden, zur Portierung von SIGNAL nach ISR siehe den [[AVR-GCC-Tutorial#Anhang|Anhang]].)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
ISR(Vectorname) /* vormals: SIGNAL(siglabel) dabei Vectorname != siglabel ! */&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ISR&#039;&#039; wird eine Funktion für die Bearbeitung eines Interrupts eingeleitet. Als Argument muss dabei die Benennung des entsprechenden Interruptvektors angegeben werden. Diese sind in den jeweiligen Includedateien IOxxxx.h zu finden. Die Bezeichnung entspricht dem Namen aus dem Datenblatt, bei dem die Leerzeichen durch Unterstriche ersetzt sind und ein &#039;&#039;_vect&#039;&#039; angehängt ist.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel ein Ausschnitt aus der Datei für den ATmega8 (bei WinAVR Standardinstallation in C:\WinAVR\avr\include\avr\iom8.h) in der neben den aktuellen Namen für &#039;&#039;ISR&#039;&#039; (*_vect) noch die Bezeichnungen für das inzwischen nicht mehr aktuelle &#039;&#039;SIGNAL&#039;&#039; (SIG_*) enthalten sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
/* $Id: iom8.h,v 1.13 2005/10/30 22:11:23 joerg_wunsch Exp $ */&lt;br /&gt;
&lt;br /&gt;
/* avr/iom8.h  - definitions for ATmega8 */&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
/* Interrupt vectors */&lt;br /&gt;
&lt;br /&gt;
/* External Interrupt Request 0 */&lt;br /&gt;
#define INT0_vect                       _VECTOR(1)&lt;br /&gt;
#define SIG_INTERRUPT0                  _VECTOR(1)&lt;br /&gt;
&lt;br /&gt;
/* External Interrupt Request 1 */&lt;br /&gt;
#define INT1_vect                       _VECTOR(2)&lt;br /&gt;
#define SIG_INTERRUPT1                  _VECTOR(2)&lt;br /&gt;
&lt;br /&gt;
/* Timer/Counter2 Compare Match */&lt;br /&gt;
#define TIMER2_COMP_vect                _VECTOR(3)&lt;br /&gt;
#define SIG_OUTPUT_COMPARE2             _VECTOR(3)&lt;br /&gt;
&lt;br /&gt;
/* Timer/Counter2 Overflow */&lt;br /&gt;
#define TIMER2_OVF_vect                 _VECTOR(4)&lt;br /&gt;
#define SIG_OVERFLOW2                   _VECTOR(4)&lt;br /&gt;
&lt;br /&gt;
/* Timer/Counter1 Capture Event */&lt;br /&gt;
#define TIMER1_CAPT_vect                _VECTOR(5)&lt;br /&gt;
#define SIG_INPUT_CAPTURE1              _VECTOR(5)&lt;br /&gt;
&lt;br /&gt;
/* Timer/Counter1 Compare Match A */&lt;br /&gt;
#define TIMER1_COMPA_vect               _VECTOR(6)&lt;br /&gt;
#define SIG_OUTPUT_COMPARE1A            _VECTOR(6)&lt;br /&gt;
&lt;br /&gt;
/* Timer/Counter1 Compare Match B */&lt;br /&gt;
#define TIMER1_COMPB_vect               _VECTOR(7)&lt;br /&gt;
#define SIG_OUTPUT_COMPARE1B            _VECTOR(7)&lt;br /&gt;
&lt;br /&gt;
//...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Vor Nutzung von SIGNAL muss ebenfalls die Header-Datei signal.h eingebunden werden.--&amp;gt; &lt;br /&gt;
Mögliche Funktionsrümpfe für Interruptfunktionen sind zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
/* veraltet: #include &amp;lt;avr/signal.h&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
ISR(INT0_vect)       /* veraltet: SIGNAL(SIG_INTERRUPT0) */&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(TIMER0_OVF_vect) /* veraltet: SIGNAL(SIG_OVERFLOW0) */&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(USART_RXC_vect) /* veraltet: SIGNAL(SIG_UART_RECV) */&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// und so weiter und so fort...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf die korrekte Schreibweise der Vektorbezeichnung ist zu achten. Der gcc-Compiler prüft erst ab Version 4.x, ob ein Signal/Interrupt der angegebenen Bezeichnung tatsächlich in der Includedatei definiert ist und gibt andernfalls eine Warnung aus. Bei WinAVR (ab 2/2005) wurde die Überprüfung auch in den mitgelieferten Compiler der Version 3.x integriert. Aus dem gcc-Quellcode Version 3.x selbst erstellte Compiler enthalten die Prüfung nicht (vgl. [[AVR-GCC]]). &lt;br /&gt;
&lt;br /&gt;
Während der Ausführung der Funktion sind alle weiteren Interrupts automatisch gesperrt. Beim Verlassen der Funktion werden die Interrupts wieder zugelassen.&lt;br /&gt;
&lt;br /&gt;
Sollte während der Abarbeitung der Interruptroutine ein weiterer Interrupt (gleiche oder andere Interruptquelle) auftreten, so wird das entsprechende Bit im zugeordneten Interrupt Flag Register gesetzt und die entsprechende Interruptroutine automatisch nach dem Beenden der aktuellen Funktion aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Ein Problem ergibt sich eigentlich nur dann, wenn während der Abarbeitung der aktuellen Interruptroutine mehrere gleichartige Interrupts auftreten. Die entsprechende Interruptroutine wird im Nachhinein zwar aufgerufen jedoch wissen wir nicht, ob nun der entsprechende Interrupt einmal, zweimal oder gar noch öfter aufgetreten ist. Deshalb soll hier noch einmal betont werden, dass Interruptroutinen so schnell wie nur irgend möglich wieder verlassen werden sollten.&lt;br /&gt;
&lt;br /&gt;
=== Unterbrechbare Interruptroutinen ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Faustregel&amp;quot;: im Zweifel &#039;&#039;&#039;ISR&#039;&#039;&#039;. Die nachfolgend beschriebene Methode nur dann verwenden, wenn man sich über die unterschiedliche Funktionsweise im Klaren ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ISR(XXX,ISR_NOBLOCK) /* veraltet: INTERRUPT(SIG_OVERFLOW0) */&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt-Code */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei steht XXX für den oben beschriebenen Namen des Vektors (also z.&amp;amp;nbsp;B. &#039;&#039;TIMER0_OVF_vect&#039;&#039;). Der Unterschied im Vergleich zu einer herkömmlichen ISR ist, dass hier beim Aufrufen der Funktion das &#039;&#039;&#039;Global Enable Interrupt&#039;&#039;&#039; Bit durch Einfügen einer SEI-Anweisung direkt wieder gesetzt und somit alle Interrupts zugelassen werden &amp;amp;ndash; auch XXX-Interrupts. &lt;br /&gt;
&lt;br /&gt;
Bei unsachgemässer Handhabung kann dies zu erheblichen Problemen durch Rekursion wie einem Stack-Overflow oder anderen unerwarteten Effekten führen und sollte wirklich nur dann eingesetzt werden, wenn man sich sicher ist, das Ganze auch im Griff zu haben.&lt;br /&gt;
&lt;br /&gt;
Insbesondere sollte möglichst am ISR-Anfang die auslösende IRQ-Quelle deaktiviert und erst am Ende der ISR wieder aktiviert werden. Robuster als die Verwendung einer NOBLOCK-ISR ist daher folgender ISR-Aufbau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ISR (XXX) &lt;br /&gt;
{&lt;br /&gt;
    // Implementiere die ISR ohne zunaechst weitere IRQs zuzulassen&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;&amp;lt;Deaktiviere die XXX-IRQ&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    // Erlaube alle Interrupts (ausser XXX)&lt;br /&gt;
    sei();&lt;br /&gt;
&lt;br /&gt;
    //... Code ...&lt;br /&gt;
&lt;br /&gt;
    // IRQs global deaktivieren um die XXX-IRQ wieder gefahrlos &lt;br /&gt;
    // aktivieren zu koennen&lt;br /&gt;
    cli();&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;&amp;lt;Aktiviere die XXX-IRQ&amp;gt;&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Auf diese Weise kann sich die XXX-IRQ nicht selbst unterbrechen, was zu einer Art Endlosschleife führen würde.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: Hinweise in [[AVR-GCC]]&lt;br /&gt;
&lt;br /&gt;
siehe dazu: http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html&lt;br /&gt;
&lt;br /&gt;
== Datenaustausch mit Interrupt-Routinen ==&lt;br /&gt;
&lt;br /&gt;
Variablen, die sowohl in Interrupt-Routinen (ISR = Interrupt Service Routine(s)) als auch vom übrigen Programmcode geschrieben oder gelesen werden, müssen mit einem &#039;&#039;&#039;volatile&#039;&#039;&#039; deklariert werden. Damit wird dem Compiler mitgeteilt, dass der Inhalt der Variablen vor jedem Lesezugriff aus dem Speicher gelesen und nach jedem Schreibzugriff in den Speicher geschrieben wird. Ansonsten könnte der Compiler den Code so optimieren, dass der Wert der Variablen nur in Prozessorregistern zwischengespeichert wird, die nichts von der Änderung woanders mitbekommen.&lt;br /&gt;
&lt;br /&gt;
Zur Veranschaulichung ein Codefragment für eine Tastenentprellung mit Erkennung einer &amp;quot;lange gedrückten&amp;quot; Taste.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
// Schwellwerte&lt;br /&gt;
// Entprellung: &lt;br /&gt;
#define CNTDEBOUNCE 10&lt;br /&gt;
// &amp;quot;lange gedrueckt:&amp;quot;&lt;br /&gt;
#define CNTREPEAT 200&lt;br /&gt;
&lt;br /&gt;
// hier z.&amp;amp;nbsp;B. Taste an Pin2 PortA &amp;quot;active low&amp;quot; = 0 wenn gedrueckt&lt;br /&gt;
#define KEY_PIN  PINA&lt;br /&gt;
#define KEY_PINNO PA2&lt;br /&gt;
&lt;br /&gt;
// beachte: volatile! &lt;br /&gt;
volatile uint8_t gKeyCounter;&lt;br /&gt;
&lt;br /&gt;
// Timer-Compare Interrupt ISR, wird z.B. alle 10ms ausgefuehrt&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
   // hier wird gKeyCounter veraendert. Die übrigen&lt;br /&gt;
   // Programmteile müssen diese Aenderung &amp;quot;sehen&amp;quot;:&lt;br /&gt;
   // volatile -&amp;gt; aktuellen Wert immer in den Speicher schreiben&lt;br /&gt;
   if ( !(KEY_PIN &amp;amp; (1&amp;lt;&amp;lt;KEY_PINNO)) ) {&lt;br /&gt;
      if (gKeyCounter &amp;lt; CNTREPEAT) gKeyCounter++;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      gKeyCounter = 0;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
//...&lt;br /&gt;
    /* hier: Initialisierung der Ports und des Timer-Interrupts */&lt;br /&gt;
//... &lt;br /&gt;
   // hier wird auf gKeyCounter zugegriffen. Dazu muss der in der&lt;br /&gt;
   // ISR geschriebene Wert bekannt sein:&lt;br /&gt;
   // volatile -&amp;gt; aktuellen Wert immer aus dem Speicher lesen&lt;br /&gt;
   if ( gKeyCounter &amp;gt; CNTDEBOUNCE ) { // Taste mind. 10*10 ms &amp;quot;prellfrei&amp;quot;&lt;br /&gt;
       if (gKeyCounter == CNTREPEAT) {&lt;br /&gt;
          /* hier: Code fuer &amp;quot;Taste lange gedrueckt&amp;quot; */&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
          /* hier: Code fuer &amp;quot;Taste kurz gedrueckt&amp;quot; */&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
//...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird innerhalb einer ISR mehrfach auf eine mit volatile deklarierte Variable zugegriffen, wirkt sich dies ungünstig auf die Verarbeitungsgeschwindigkeit aus, da bei jedem Zugriff mit dem Speicherinhalt abgeglichen wird. Da bei AVR-Controllern &#039;&#039;innerhalb&#039;&#039; einer ISR keine Unterbrechungen zu erwarten sind, bietet es sich an, einen Zwischenspeicher in Form einer lokalen Variable zu verwenden, deren Inhalt zu Beginn und am Ende mit dem der volatile Variable synchronisiert wird. Lokale Variable werden bei eingeschalteter Optimierung mit hoher Wahrscheinlichkeit in Prozessorregistern verwaltet und der Zugriff darauf ist daher nur mit wenigen internen Operationen verbunden. Die ISR aus dem vorherigen Beispiel lässt sich so optimieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
   uint8_t tmp_kc;&lt;br /&gt;
&lt;br /&gt;
   tmp_kc = gKeyCounter; // Uebernahme in lokale Arbeitsvariable&lt;br /&gt;
&lt;br /&gt;
   if ( !(KEY_PIN &amp;amp; (1&amp;lt;&amp;lt;KEY_PINNO)) ) {&lt;br /&gt;
      if (tmp_kc &amp;lt; CNTREPEAT) {&lt;br /&gt;
         tmp_kc++;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      tmp_kc = 0;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   gKeyCounter = tmp_kc; // Zurueckschreiben&lt;br /&gt;
}&lt;br /&gt;
//...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich die Disassemblies (Ausschnitte der &amp;quot;lss-Dateien&amp;quot;, compiliert für ATmega162) im Anschluss. Man erkennt den viermaligen Zugriff auf die Speicheraddresse von &#039;&#039;gKeyCounter&#039;&#039; (hier 0x032A) in der ISR ohne &amp;quot;Cache&amp;quot;-Variable und den zweimaligen Zugriff in der Variante mit Zwischenspeicher. Im Beispiel ist der Vorteil gering, bei komplexeren Routinen kann die Zwischenspeicherung in lokalen Variablen jedoch zu deutlicheren Verbesserungen führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
     86a:	1f 92       	push	r1&lt;br /&gt;
     86c:	0f 92       	push	r0&lt;br /&gt;
     86e:	0f b6       	in	r0, 0x3f	; 63&lt;br /&gt;
     870:	0f 92       	push	r0&lt;br /&gt;
     872:	11 24       	eor	r1, r1&lt;br /&gt;
     874:	8f 93       	push	r24&lt;br /&gt;
    if ( !(KEY_PIN &amp;amp; (1&amp;lt;&amp;lt;KEY_PINNO)) ) {&lt;br /&gt;
     876:	ca 99       	sbic	0x19, 2	; 25&lt;br /&gt;
     878:	0a c0       	rjmp	.+20     	; 0x88e &amp;lt;__vector_13+0x24&amp;gt;&lt;br /&gt;
      if (gKeyCounter &amp;lt; CNTREPEAT) gKeyCounter++;&lt;br /&gt;
     87a:	80 91 2a 03 	lds	r24, 0x032A&lt;br /&gt;
     87e:	88 3c       	cpi	r24, 0xC8	; 200 &lt;br /&gt;
     880:	40 f4       	brcc	.+16     	; 0x892 &amp;lt;__vector_13+0x28&amp;gt;&lt;br /&gt;
     882:	80 91 2a 03 	lds	r24, 0x032A&lt;br /&gt;
     886:	8f 5f       	subi	r24, 0xFF	; 255&lt;br /&gt;
     888:	80 93 2a 03 	sts	0x032A, r24&lt;br /&gt;
     88c:	02 c0       	rjmp	.+4      	; 0x892 &amp;lt;__vector_13+0x28&amp;gt;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      gKeyCounter = 0;&lt;br /&gt;
     88e:	10 92 2a 03 	sts	0x032A, r1&lt;br /&gt;
     892:	8f 91       	pop	r24&lt;br /&gt;
     894:	0f 90       	pop	r0&lt;br /&gt;
     896:	0f be       	out	0x3f, r0	; 63&lt;br /&gt;
     898:	0f 90       	pop	r0&lt;br /&gt;
     89a:	1f 90       	pop	r1&lt;br /&gt;
     89c:	18 95       	reti&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ISR(TIMER1_COMPA_vect)&lt;br /&gt;
{&lt;br /&gt;
     86a:	1f 92       	push	r1&lt;br /&gt;
     86c:	0f 92       	push	r0&lt;br /&gt;
     86e:	0f b6       	in	r0, 0x3f	; 63&lt;br /&gt;
     870:	0f 92       	push	r0&lt;br /&gt;
     872:	11 24       	eor	r1, r1&lt;br /&gt;
     874:	8f 93       	push	r24&lt;br /&gt;
   uint8_t tmp_kc;&lt;br /&gt;
 &lt;br /&gt;
   tmp_kc = gKeyCounter;&lt;br /&gt;
     876:	80 91 2a 03 	lds	r24, 0x032A&lt;br /&gt;
 &lt;br /&gt;
   if ( !(KEY_PIN &amp;amp; (1&amp;lt;&amp;lt;KEY_PINNO)) ) {&lt;br /&gt;
     87a:	ca 9b       	sbis	0x19, 2	; 25&lt;br /&gt;
     87c:	02 c0       	rjmp	.+4      	; 0x882 &amp;lt;__vector_13+0x18&amp;gt;&lt;br /&gt;
     87e:	80 e0       	ldi	r24, 0x00	; 0&lt;br /&gt;
     880:	03 c0       	rjmp	.+6      	; 0x888 &amp;lt;__vector_13+0x1e&amp;gt;&lt;br /&gt;
      if (tmp_kc &amp;lt; CNTREPEAT) {&lt;br /&gt;
     882:	88 3c       	cpi	r24, 0xC8	; 200&lt;br /&gt;
     884:	08 f4       	brcc	.+2      	; 0x888 &amp;lt;__vector_13+0x1e&amp;gt;&lt;br /&gt;
         tmp_kc++;&lt;br /&gt;
     886:	8f 5f       	subi	r24, 0xFF	; 255&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      tmp_kc = 0;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   gKeyCounter = tmp_kc;&lt;br /&gt;
     888:	80 93 2a 03 	sts	0x032A, r24&lt;br /&gt;
     88c:	8f 91       	pop	r24&lt;br /&gt;
     88e:	0f 90       	pop	r0&lt;br /&gt;
     890:	0f be       	out	0x3f, r0	; 63&lt;br /&gt;
     892:	0f 90       	pop	r0&lt;br /&gt;
     894:	1f 90       	pop	r1&lt;br /&gt;
     896:	18 95       	reti&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== volatile und Pointer ===&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;volatile&#039;&#039;&#039; in Verbindung mit Pointern ist zu beachten, ob der Pointer selbst oder die Variable, auf die der Pointer zeigt, &#039;&#039;&#039;volatile&#039;&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
volatile uint8_t *a;   // das Ziel von a ist volatile&lt;br /&gt;
&lt;br /&gt;
uint8_t *volatile a;   // a selbst ist volatile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls der Pointer volatile ist (zweiter Fall im Beispiel), ist zu beachten, dass der Wert des Pointers, also eine Speicheradresse, intern in mehr als einem Byte verwaltet wird. Lese- und Schreibzugriffe im Hauptprogramm (außerhalb von Interrupt-Routinen) sind daher so zu implementieren, dass alle Teilbytes der Adresse konsistent bleiben, vgl. dazu den folgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Variablen größer 1 Byte ===&lt;br /&gt;
&lt;br /&gt;
Bei Variablen größer ein Byte, auf die in Interrupt-Routinen und im Hauptprogramm zugegriffen wird, muss darauf geachtet werden, dass die Zugriffe auf die einzelnen Bytes außerhalb der ISR nicht durch einen Interrupt unterbrochen werden. (Allgemeinplatz: AVRs sind 8-bit Controller). Zur Veranschaulichung ein Codefragment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
volatile uint16_t gMyCounter16bit;&lt;br /&gt;
//...&lt;br /&gt;
ISR(...)&lt;br /&gt;
{&lt;br /&gt;
//...&lt;br /&gt;
   gMyCounter16Bit++;&lt;br /&gt;
//...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   uint16_t tmpCnt;&lt;br /&gt;
//...&lt;br /&gt;
   // nicht gut: Mglw. hier ein Fehler, wenn ein Byte von MyCounter &lt;br /&gt;
   // schon in tmpCnt kopiert ist aber vor dem Kopieren des zweiten Bytes &lt;br /&gt;
   // ein Interrupt auftritt, der den Inhalt von MyCounter verändert.&lt;br /&gt;
   tmpCnt = gMyCounter16bit; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   // besser: Änderungen &amp;quot;außerhalb&amp;quot; verhindern -&amp;gt; alle &amp;quot;Teilbytes&amp;quot;&lt;br /&gt;
   // bleiben konsistent&lt;br /&gt;
   cli();  // Interrupts deaktivieren&lt;br /&gt;
   tmpCnt = gMyCounter16Bit;&lt;br /&gt;
   sei();  // wieder aktivieren&lt;br /&gt;
&lt;br /&gt;
   // oder: vorheriger Status des globalen Interrupt-Flags bleibt erhalten&lt;br /&gt;
   uint8_t sreg_tmp;&lt;br /&gt;
   sreg_tmp = SREG;    /* Sichern */&lt;br /&gt;
   cli()&lt;br /&gt;
   tmpCnt = gMyCounter16Bit;&lt;br /&gt;
   SREG = sreg_tmp;    /* Wiederherstellen */&lt;br /&gt;
&lt;br /&gt;
   // oder: mehrfach lesen, bis man konsistente Daten hat&lt;br /&gt;
   uint16_t count1 = gMyCounter16Bit;&lt;br /&gt;
   uint16_t count2 = gMyCounter16Bit;&lt;br /&gt;
   while (count1 != count2) {&lt;br /&gt;
       count1 = count2;&lt;br /&gt;
       count2 = gMyCounter16Bit;&lt;br /&gt;
   }&lt;br /&gt;
   tmpCnt = count1;&lt;br /&gt;
//...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die avr-libc bietet ab Version 1.6.0(?) einige Hilfsfunktionen/Makros, mit der im Beispiel oben gezeigten Funktionalität, die zusätzlich auch sogenannte [http://en.wikipedia.org/wiki/Memory_barrier memory barriers] beinhalten. Diese stehen nach #include &amp;lt;util/atomic.h&amp;gt; zur Verfügung.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
#include &amp;lt;util/atomic.h&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
    // analog zu cli, Zugriff, sei:&lt;br /&gt;
    ATOMIC_BLOCK(ATOMIC_FORCEON) {&lt;br /&gt;
        tmpCnt = gMyCounter16Bit;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// oder:&lt;br /&gt;
&lt;br /&gt;
    // analog zu Sicherung des SREG, cli, Zugriff und Zurückschreiben des SREG:&lt;br /&gt;
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {&lt;br /&gt;
        tmpCnt = gMyCounter16Bit;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* siehe auch [http://www.nongnu.org/avr-libc/user-manual/group__util__atomic.html Dokumentation der avr-libc zu atomic.h]&lt;br /&gt;
&lt;br /&gt;
== Interrupt-Routinen und Registerzugriffe ==&lt;br /&gt;
&lt;br /&gt;
Falls Register sowohl im Hauptprogramm als auch in Interrupt-Routinen verändert werden, ist darauf zu achten, dass diese Zugriffe sich nicht überlappen. Nur wenige Anweisungen lassen sich in sogenannte &amp;quot;atomare&amp;quot; Zugriffe übersetzen, die nicht von Interrupt-Routinen unterbrochen werden können. &lt;br /&gt;
&lt;br /&gt;
Zur Veranschaulichung eine Anweisung, bei der ein Bit und im Anschluss drei Bits in einem Register gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
//...&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA0);&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2)|(1&amp;lt;&amp;lt;PA3)|(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
//...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Compiler übersetzt diese Anweisungen für einen ATmega128 bei Optimierungsstufe &amp;quot;S&amp;quot; nach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA0);&lt;br /&gt;
  d2:	d8 9a       	sbi	0x1b, 0	; 27 (a)&lt;br /&gt;
	&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA2)|(1&amp;lt;&amp;lt;PA3)|(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
  d4:	8b b3       	in	r24, 0x1b	; 27 (b)&lt;br /&gt;
  d6:	8c 61       	ori	r24, 0x1C	; 28 (c)&lt;br /&gt;
  d8:	8b bb       	out	0x1b, r24	; 27 (d)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Setzen des einzelnen Bits wird bei eingeschalteter Optimierung für Register im unteren Speicherbereich in eine einzige Assembler-Anweisung (sbi) übersetzt und ist nicht anfällig für Unterbrechungen durch Interrupts. Die Anweisung zum Setzen von drei Bits wird jedoch in drei abhängige Assembler-Anweisungen übersetzt und bietet damit zwei &amp;quot;Angriffspunkte&amp;quot; für Unterbrechungen. Eine Interrupt-Routine könnte nach dem Laden des Ausgangszustands in den Zwischenspeicher (hier Register 24) den Wert des Registers ändern, z.&amp;amp;nbsp;B. ein Bit löschen. Damit würde der Zwischenspeicher nicht mehr mit dem tatsächlichen Zustand übereinstimmen aber dennoch nach der Bitoperation (hier ori) in das Register zurückgeschrieben. &lt;br /&gt;
&lt;br /&gt;
Beispiel: PORTA sei anfangs 0b00000000. Die erste Anweisung (a) setzt Bit 0 auf &#039;&#039;&#039;1&#039;&#039;&#039;, PORTA ist danach 0b0000000&#039;&#039;&#039;1&#039;&#039;&#039;. Nun wird im ersten Teil der zweiten Anweisung der Portzustand in ein Register eingelesen (b). Unmittelbar darauf (vor (c)) &amp;quot;feuert&amp;quot; ein Interrupt, in dessen Interrupt-Routine Bit 0 von PORTA gelöscht wird. Nach Verlassen der Interrupt-Routine hat PORTA den Wert 0b00000000. In den beiden noch folgenden Anweisungen des Hauptprogramms wird nun der zwischengespeicherte &amp;quot;alte&amp;quot; Zustand 0b00000001 mit 0b00011100 logisch-&#039;&#039;&#039;ODER&#039;&#039;&#039;-verknüft (c) und das Ergebnis 0b00011101 in PortA geschrieben (d). Obwohl zwischenzeitlich Bit 0 gelöscht wurde, ist es nach (d) wieder gesetzt. &lt;br /&gt;
&lt;br /&gt;
Lösungsmöglichkeiten:&lt;br /&gt;
* Register ohne besondere Vorkehrungen nicht in Interruptroutinen &#039;&#039;und&#039;&#039; im Hauptprogramm verändern.&lt;br /&gt;
* Interrupts vor Veränderungen in Registern, die auch in ISRs verändert werden, deaktivieren (&amp;quot;cli&amp;quot;).&lt;br /&gt;
* Bits einzeln löschen oder setzen. sbi und cbi können nicht unterbrochen werden. Vorsicht: nur Register im unteren Speicherbereich sind mittels sbi/cbi ansprechbar. Der Compiler kann nur für diese sbi/cbi-Anweisungen generieren. Für Register außerhalb dieses Adressbereichs (&amp;quot;Memory-Mapped&amp;quot;-Register) werden auch zur Manipulation einzelner Bits abhängige Anweisungen erzeugt (lds,...,sts).&lt;br /&gt;
&lt;br /&gt;
* siehe auch: [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Frequently asked Questions/Fragen Nr. 1 und 8. (Stand: avr-libc Vers. 1.0.4)&lt;br /&gt;
&lt;br /&gt;
== Interruptflags löschen ==&lt;br /&gt;
&lt;br /&gt;
Beim Löschen von Interruptflags haben AVRs eine Besonderheit, die auch im Datenblatt beschrieben ist: Es wird zum Löschen eine 1 in das betreffende Bit geschrieben. &lt;br /&gt;
&lt;br /&gt;
Hinweis:&amp;lt;br /&amp;gt;&lt;br /&gt;
Bei Registern mit mehreren Interrupt-Flag-Bits (wie die Timer Interrupt Flag Register)  &#039;&#039;&#039;nicht&#039;&#039;&#039;  die übliche bitweise VerODERung nehmen, sondern eine direkte Zuweisung machen. Da sonst weitere Flags, als nur das gewünschte, ebenfalls gelöscht werden könnten.&amp;lt;br /&amp;gt;&lt;br /&gt;
([http://www.mikrocontroller.net/topic/171148#1640133 Erklärung]).&lt;br /&gt;
&lt;br /&gt;
== Was macht das Hauptprogramm? ==&lt;br /&gt;
&lt;br /&gt;
Im einfachsten (Ausnahme-)Fall gar nichts mehr. Es ist also durchaus denkbar, ein Programm zu schreiben, welches in der main-Funktion lediglich noch die Interrupts aktiviert und dann in einer Endlosschleife verharrt. Sämtliche Funktionen werden dann in den ISRs abgearbeitet. Diese Vorgehensweise ist jedoch bei den meisten Anwendungen schlecht: man verschenkt eine Verarbeitungsebene und hat außerdem möglicherweise Probleme durch Interruptroutinen, die zu viel Verarbeitungszeit benötigen.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird man in den Interruptroutinen nur die bei Auftreten des jeweiligen Interruptereignisses unbedingt notwendigen Operationen ausführen lassen. Alle weniger kritischen Aufgaben werden dann im Hauptprogramm abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
* siehe auch: [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitt Modules/Interrupts and Signals&lt;br /&gt;
&lt;br /&gt;
= Sleep-Modes =&lt;br /&gt;
&lt;br /&gt;
AVR Controller verfügen über eine Reihe von sogenannten [[Sleep Mode |&#039;&#039;Sleep-Modes&#039;&#039;]] (&amp;quot;Schlaf-Modi&amp;quot;). Diese ermöglichen es, Teile des Controllers abzuschalten. Zum Einen kann damit besonders bei Batteriebetrieb Strom gespart werden, zum Anderen können Komponenten des Controllers deaktiviert werden, die die Genauigkeit des Analog-Digital-Wandlers bzw. des Analog-Comparators negativ beeinflussen. Der Controller wird durch Interrupts aus dem Schlaf geweckt. Welche Interrupts den jeweiligen Schlafmodus beenden, ist einer Tabelle im Datenblatt des jeweiligen Controllers zu entnehmen.&lt;br /&gt;
Die Funktionen (eigentlich Makros) der avr-libc stehen nach Einbinden der header-Datei &#039;&#039;sleep.h&#039;&#039; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
;set_sleep_mode (uint8_t mode): Setzt den Schlafmodus, der bei Aufruf von sleep() aktiviert wird. In sleep.h sind einige Konstanten definiert (z.&amp;amp;nbsp;B. SLEEP_MODE_PWR_DOWN). Die definierten Modi werden jedoch nicht alle von sämtlichten AVR-Controllern unterstützt.&lt;br /&gt;
;sleep_enable(): Aktiviert den gesetzten Schlafmodus, versetzt den Controller aber noch nicht in den Schlafmodus&lt;br /&gt;
;sleep_cpu(): Versetzt den Controller in den Schlafmodus .sleep_cpu wird im Prinzip durch die Assembler-Anweisung &#039;&#039;sleep&#039;&#039; ersetzt.&lt;br /&gt;
;sleep_disable(): Deaktiviert den gesetzten Schlafmodus&lt;br /&gt;
;sleep_mode(): Versetzt den Controller in den mit set_sleep_mode gewählten Schlafmodus. Das Makro entspricht sleep_enable()+sleep_cpu()+sleep_disable(), beinhaltet also nicht die Aktivierung von Interrupts (besser nicht benutzen).&lt;br /&gt;
&lt;br /&gt;
Bei Anwendung von sleep_cpu() müssen Interrupts also bereits freigeben sein (sei()), da der Controller sonst nicht mehr &amp;quot;aufwachen&amp;quot; kann. sleep_mode() ist nicht geeignet für die Verwendung in ISR Interrupt-Service-Routinen, da bei deren Abarbeitung Interrupts global deaktiviert sind und somit auch die möglichen &amp;quot;Aufwachinterrupts&amp;quot;. Abhilfe: stattdessen sleep_enable(), sei(), sleep_cpu(), sleep_disable() und evtl. cli() verwenden (vgl. Dokumentation der avr-libc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/sleep.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
   while (1) {&lt;br /&gt;
...&lt;br /&gt;
      set_sleep_mode(SLEEP_MODE_PWR_DOWN);&lt;br /&gt;
      sleep_mode();&lt;br /&gt;
   &lt;br /&gt;
      // Code hier wird erst nach Auftreten eines entsprechenden&lt;br /&gt;
      // &amp;quot;Aufwach-Interrupts&amp;quot; verarbeitet&lt;br /&gt;
...&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In älteren Versionenen der avr-libc wurden nicht alle AVR-Controller durch die sleep-Funktionen richtig angesteuert. Mit avr-libc 1.2.0 wurde die Anzahl der unterstützten Typen jedoch deutlich erweitert. Bei nicht-unterstützten Typen erreicht man die gewünschte Funktionalität durch direkte &amp;quot;[[Bitmanipulation]]&amp;quot; der entsprechenden Register (vgl. Datenblatt) und Aufruf des Sleep-Befehls via Inline-Assembler oder sleep_cpu():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
   // Sleep-Mode &amp;quot;Power-Save&amp;quot; beim ATmega169 &amp;quot;manuell&amp;quot; aktivieren&lt;br /&gt;
   SMCR = (3&amp;lt;&amp;lt;SM0) | (1&amp;lt;&amp;lt;SE);&lt;br /&gt;
   asm volatile (&amp;quot;sleep&amp;quot;::); // alternativ sleep_cpu() aus sleep.h&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sleep-Modi ==&lt;br /&gt;
Die vielen Prozessoren aus der AVR-Familie unterstützen unterschiedliche Sleep-Modi, gefächert nach Vorhandensein von Funktionsblöcken im Controller. Konkrete und verläßliche Auskunft über die tatsächlichen Gegebenheiten finden sich wie immer in den jeweiligen Datenblättern. Die Modi unterscheiden sich darin, welche Funktionsbereiche zum Energiesparen abgeschaltet werden. Davon hängt auch ab, mit welchen Mitteln der Prozessor aus der jeweiligen Schlaftiefe wieder aufgeweckt werden kann.&lt;br /&gt;
&lt;br /&gt;
;Idle Mode (SLEEP_MODE_IDLE): Die CPU kann durch SPI, USART, Analog Comperator, ADC, TWI, Timer, Watchdog und irgendeinen anderen Interrupt wieder aufgeweckt werden.&lt;br /&gt;
&lt;br /&gt;
;ADC Noise Reduction Mode (SLEEP_MODE_ADC): In diesem Modus liegt das Hauptaugenmerk darauf, die CPU soweit stillzulegen, dass der ADC möglichst keine Störungen aus dem inneren der CPU auffangen kann, die das Meßergebnis negativ beeinflussen können. Das Aufwachen aus diesem Modus kann ausgelöst werden durch den ADC, externe Interrupts, TWI, Timer und Watchdog.&lt;br /&gt;
&lt;br /&gt;
;Power-Down Mode (SLEEP_MODE_PWR_DOWN): In diesem Modus wird ein externer Oszillator (Quarz, Quarzoszillator), wenn vorhanden. gestoppt. Geweckt werden kann die CPU durch einen externen Level-Interrupt, TWI, Watchdog, Brown-Out-Reset.&lt;br /&gt;
&lt;br /&gt;
;Power-Save-Mode (SLEEP_MODE_PWR_SAVE): Power-Save ist identisch zu Power-Down mit einer Ausnahme: Ist der Timer 2 auf die Verwendung eines externen Taktes konfiguriert, so läuft dieser Timer auch im Power-Save weiter und kann die CPU mit einem Interrupt aufwecken.&lt;br /&gt;
&lt;br /&gt;
;Standby-Mode (SLEEP_MODE_STANDBY, SLEEP_MODE_EXT_STANDBY): Voraussetzung für den Standby-Modus ist die Verwendung eines Quarzes oder eines Quarzoszillators, also einer externen Taktquelle. Ansonsten ist dieser Modus identisch zum Power-Down Modus. Vorteil dieses Modus&#039; ist eine kürzere Aufwachzeit.&lt;br /&gt;
&lt;br /&gt;
;Abschalten des Brownout Detect (BOD) während der Sleep-Phase (nur P-Typen): Zur Stromersparnis bieten die P-Typen die Möglichkeit den BOD während der Sleep-Phase abzuschalten. Bei einem Atmega88PA beispielsweise, kann dadurch der Stromverbrauch im SLEEP_MODE_PWR_SAVE mit Timer2 im Asynchronmodus mit Uhrenquarz und periodischer Selbstaufweckung um ca. 50% gesenkt werden.&lt;br /&gt;
Das Einschalten dieser Funktion geschieht in einer Timed Sequence.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned char temp0 = MCUCR;&lt;br /&gt;
unsigned char temp1 = MCUCR;&lt;br /&gt;
temp0 |= (1 &amp;lt;&amp;lt; BODS) | (1 &amp;lt;&amp;lt; BODSE);&lt;br /&gt;
temp1 |= (1 &amp;lt;&amp;lt; BODS);&lt;br /&gt;
MCUCR = temp0;&lt;br /&gt;
MCUCR = temp1;&lt;br /&gt;
sleep_cpu();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist unbedingt zu beachten, dass das BODS-Bit 3 Takte nach dem Setzen wieder gelöscht wird. Daher muss der Aufruf des Sleep unmittelbar nach dem Setzen erfolgen und das BODS-Bit muss jedes Mal vor einem Sleep Aufruf erneut gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitt Modules/Power Management and Sleep-Modes&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/96369#832712 Forenbeitrag] zur &amp;quot;Nichtverwendung&amp;quot; von sleep_mode in ISRs.&lt;br /&gt;
&lt;br /&gt;
= Zeiger =&lt;br /&gt;
Zeiger (engl. &#039;&#039;Pointer&#039;&#039;) sind Variablen, die die Adresse von Daten oder Funktionen enthalten und belegen 16 Bits. Die Größe hängt mit dem adressierbaren Speicherbereich zusammen und der GCC reserviert dann den entsprechenden Platz.&lt;br /&gt;
Ggf. ist es also günstiger, Indizes auf Arrays (Listen) zu verwenden, so dass der GCC für die Zeigerarithmetik den erforderlichen RAM nur temporär benötigt.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Zeiger]]&lt;br /&gt;
&lt;br /&gt;
= Speicherzugriffe =&lt;br /&gt;
&lt;br /&gt;
Atmel AVR-Controller verfügen typisch über drei Speicher:&lt;br /&gt;
&lt;br /&gt;
* [[RAM]]: Im RAM (genauer statisches RAM/SRAM) wird vom gcc-Compiler Platz für Variablen reserviert. Auch der Stack befindet sich im RAM. Dieser Speicher ist &amp;quot;flüchtig&amp;quot;, d.h. der Inhalt der Variablen geht beim Ausschalten oder einem Zusammenbruch der Spannungsversorgung verloren.&lt;br /&gt;
&lt;br /&gt;
* Programmspeicher: Ausgeführt als FLASH-Speicher, seitenweise wiederbeschreibbar. Darin ist das Anwendungsprogramm abgelegt.&lt;br /&gt;
&lt;br /&gt;
* [[EEPROM]]: Nichtflüchtiger Speicher, d.h. der einmal geschriebene Inhalt bleibt auch ohne Stromversorgung erhalten. Byte-weise schreib/lesbar. Im EEPROM werden typischerweise gerätespezifische Werte wie z.&amp;amp;nbsp;B. Kalibrierungswerte von Sensoren abgelegt.&lt;br /&gt;
&lt;br /&gt;
Einige AVRs besitzen keinen RAM-Speicher, lediglich die Register können als &amp;quot;Arbeitsvariablen&amp;quot;&lt;br /&gt;
genutzt werden. Da die Anwendung des avr-gcc auf solch &amp;quot;kleinen&amp;quot; Controllern ohnehin selten sinnvoll ist und auch nur bei einigen RAM-losen Typen nach [http://lightner.net/avr/ATtinyAvrGcc.html &amp;quot;Bastelarbeiten&amp;quot;] möglich ist, werden diese Controller hier nicht weiter berücksichtigt. Auch EEPROM-Speicher ist nicht auf allen Typen verfügbar. Generell sollten die nachfolgenden Erläuterungen auf alle ATmega-Controller und die größeren AT90-Typen übertragbar sein. Für die Typen ATtiny2313, ATtiny26 und viele weitere der &amp;quot;ATtiny-Reihe&amp;quot; gelten die Ausführungen ebenfalls.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [[Binäre Daten zum Programm hinzufügen]]&lt;br /&gt;
== RAM ==&lt;br /&gt;
&lt;br /&gt;
Die Verwaltung des RAM-Speichers erfolgt durch den Compiler, im Regelfall ist beim Zugriff auf Variablen im RAM nichts Besonderes zu beachten. Die Erläuterungen in jedem brauchbaren C-Buch gelten auch für den vom avr-gcc-Compiler erzeugten Code.&lt;br /&gt;
&lt;br /&gt;
Um Speicher dynamisch (während der Laufzeit) zu reservieren, kann &#039;&#039;&#039;malloc()&#039;&#039;&#039; verwendet werden. malloc(size) &amp;quot;alloziert&amp;quot; (~reserviert) einen gewissen Speicherblock mit &#039;&#039;&#039;size&#039;&#039;&#039; Bytes. Ist kein Platz für den neuen Block, wird NULL (0) zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Wird der angelegte Block zu klein (groß), kann die Größe mit realloc() verändert werden. Den allozierten Speicherbereich kann man mit free() wieder freigeben. Wenn das Freigeben eines Blocks vergessen wird spricht man von einem &amp;quot;Speicherleck&amp;quot; (memory leak).&lt;br /&gt;
&lt;br /&gt;
malloc() legt Speicherblöcke im &#039;&#039;&#039;Heap&#039;&#039;&#039; an, belegt man zuviel Platz, dann wächst der Heap zu weit nach oben und überschreibt den Stack, und der Controller kommt in Teufels Küche. Das kann leider nicht nur passieren wenn man insgesamt zu viel Speicher anfordert, sondern auch wenn man Blöcke unterschiedlicher Größe in ungünstiger Reihenfolge alloziert/freigibt (siehe Artikel [[Heap-Fragmentierung]]). Aus diesem Grund sollte man malloc() auf Mikrocontrollern sehr sparsam (am besten gar nicht) verwenden.&lt;br /&gt;
&lt;br /&gt;
Beispiel zur Verwendung von malloc():&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void foo(void) {&lt;br /&gt;
  // neuen speicherbereich anlegen,&lt;br /&gt;
  // platz für 10 uint16&lt;br /&gt;
  uint16_t* pBuffer = malloc(10 * sizeof(uint16_t));&lt;br /&gt;
&lt;br /&gt;
  // darauf zugreifen, als wärs ein gewohnter Buffer&lt;br /&gt;
  pBuffer[2] = 5;&lt;br /&gt;
&lt;br /&gt;
  // Speicher (unbedingt!) wieder freigeben&lt;br /&gt;
  free(pBuffer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn (wie in obigem Beispiel) dynamischer Speicher nur für die Dauer einer Funktion benötigt und am Ende wieder freigegeben wird, bietet es sich an, statt malloc() &#039;&#039;&#039;alloca()&#039;&#039;&#039; zu verwenden. Der Unterschied zu malloc() ist, dass der Speicher auf dem Stack reserviert wird, und beim Verlassen der Funktion automatisch wieder freigegeben wird. Es kann somit kein Speicherleck und keine Fragmentierung entstehen.&lt;br /&gt;
&lt;br /&gt;
siehe auch:&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/malloc.html AVR Libc Home Page]: Memory Areas and Using malloc()&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/479027#5934443 Forumsbeitrag]: RAM Verbrauch auch von lokalen variablen ermitteln&lt;br /&gt;
&lt;br /&gt;
== Flash mit PROGMEM und pgm_read ==&lt;br /&gt;
&lt;br /&gt;
→ [http://nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html avr-libc: Doku zu avr/pgmspace.h]&lt;br /&gt;
&lt;br /&gt;
Ein Zugriff auf Konstanten im Programmspeicher ist mittels avr-gcc erst ab Version 4.7 &amp;quot;transparent&amp;quot; möglich. Um Daten aus dem Flash zu lesen, muss die AVR-Instruktion LPM (&#039;&#039;Load from Program Memory&#039;&#039;) erzeugt werden, bei Controllern mit mehr als 64kiB Flash auch ELPM.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt es das AVR-spezifische GCC-Attribut &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt;, mit dem eine Variablendeklaration im &#039;&#039;static storage&#039;&#039;&amp;lt;ref&amp;gt;Variablen der Speicherklasse &#039;&#039;static storage&#039;&#039; haben eine unbegrenzte Lebensdauer.  Beispiel für solche Variablen sind globale Variablen, aber auch static-Variablen innerhalb einer Funktion gehören dazu.  Beispiele für Variablen, die nicht &#039;&#039;static storage&#039;&#039; sind: auto-Variablen (&amp;quot;normale&amp;quot; lokale Variablen), register-Variablen, durch malloc geschaffene Objekte, etc.&amp;lt;/ref&amp;gt; markiert werden kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int value __attribute__((progmem)) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Effekt ist, dass die so markierte Variable nicht im RAM sondern im Flash angelegt wird.  Wird durch &amp;quot;normalen&amp;quot; C-Code auf solch eine Variable zugegriffen, wird jedoch aus der gleichen Adresse aus dem RAM gelesen und nicht aus dem Flash! Das ist ein Fehler, den der Compiler aber nicht anzeigt!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int test = value;  // Fehler! PROGMEM Konstanten müssen mit den pgm_read-Funktionen gelesen werden!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Lesen aus dem Flash stellt die avr-libc daher zahlreiche Makros zur Verfügung.  Zudem wird das Makro &amp;lt;tt&amp;gt;PROGMEM&amp;lt;/tt&amp;gt; definiert, das etwas Tipparbeit spart:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int value PROGMEM = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; funktioniert im Wesentlichen wie ein Section-Attribut, das die Daten in der Section &amp;lt;tt&amp;gt;.progmem.data&amp;lt;/tt&amp;gt; ablegt.  Im Gegensatz zum Section-Attribut werden jedoch noch weitere Prüfungen unternommen, ab avr-gcc 4.6 etwa muss die entsprechende Variable &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
=== Integer und float ===&lt;br /&gt;
&lt;br /&gt;
Zum Lesen von Skalaren stellt die avr-libc folgende Makros zu Verfügung, die jeweils ein Argument erhalten: Die 16-Bit Adresse des zu lesenden Wertes&amp;lt;ref&amp;gt;Damit ist der mögliche Speicherbereich für Flash-Konstanten auf 64kiB begrenzt. Einige pgmspace-Funktionen ermöglichen den Lesezugriff auf den gesamten Flash-Speicher, intern via Assembler-Anweisung ELPM. Die Initialisierungswerte des Speicherinhalts jenseits der 64kiB-Marke müssen dann jedoch auf anderem Weg angelegt werden, d.h. nicht per PROGMEM. Evtl. eigene Section und Linker-Optionen. Alt und nicht ganz korrekt: Die avr-libc pgmspace-Funktionen unterstützen nur die unteren 64kiB Flash bei Controllern mit mehr als 64kiB.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:{| {{Tabelle}}&lt;br /&gt;
|+ Übersicht der &amp;lt;tt&amp;gt;pgm_read&amp;lt;/tt&amp;gt; Funktionen aus&amp;lt;br/&amp;gt;dem Header &amp;lt;tt&amp;gt;avr/pgmspace.h&amp;lt;/tt&amp;gt; der avr-libc&lt;br /&gt;
|-&lt;br /&gt;
! Gelesener Wert || &amp;lt;tt&amp;gt;pgm_read_xxx&amp;lt;/tt&amp;gt; || Anzahl Bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;uint8_t&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;pgm_read_byte&amp;lt;/tt&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;uint16_t&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;pgm_read_word&amp;lt;/tt&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;uint32_t&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;pgm_read_dword&amp;lt;/tt&amp;gt; || 4&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;pgm_read_float&amp;lt;/tt&amp;gt;&amp;lt;ref&amp;gt;ab avr-libc 1.7.0&amp;lt;/ref&amp;gt; || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Soll ein Zeiger gelesen werden, so verwendet man &amp;lt;tt&amp;gt;pgm_read_word&amp;lt;/tt&amp;gt; und castet das Ergebnis zum gewünschten Zeiger-Typ.&lt;br /&gt;
&lt;br /&gt;
;Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Byte */&lt;br /&gt;
const uint8_t aByte PROGMEM = 123;&lt;br /&gt;
&lt;br /&gt;
/* int-Array */&lt;br /&gt;
const int anArray[] PROGMEM = { 18, 3 ,70 };&lt;br /&gt;
&lt;br /&gt;
void foo (void)&lt;br /&gt;
{&lt;br /&gt;
  /* Zeiger */&lt;br /&gt;
  static const uint8_t* const aPointer PROGMEM = &amp;amp;aByte;&lt;br /&gt;
&lt;br /&gt;
  uint8_t a        = pgm_read_byte (&amp;amp;aByte);&lt;br /&gt;
  int a2           = (int) pgm_read_word (&amp;amp;anArray[2]);&lt;br /&gt;
  const uint8_t* p = (const uint8_t*) pgm_read_word (&amp;amp;aPointer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blöcke ===&lt;br /&gt;
&lt;br /&gt;
In den Flash-Funktionen der avr-libc sind keine der pgm_read_xxxx Nomenklatur folgenden Funktionen, die Speicherblöcke auslesen oder vergleichen. Die enstprechende Funktionen sind Varianten von &amp;lt;tt&amp;gt;memcpy&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;memcmp&amp;lt;/tt&amp;gt; und heißt &amp;lt;tt&amp;gt;memcpy_P&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;memcmp_P&amp;lt;/tt&amp;gt;, usw.  Für weitere Funktionen und deren Prototypen siehe die Dokumentation der avr-libc.&lt;br /&gt;
&lt;br /&gt;
=== Strings ===&lt;br /&gt;
&lt;br /&gt;
Strings sind in C nichts anderes als eine Abfolge von Zeichen und einem &amp;lt;tt&amp;gt;&#039;\0&#039;&amp;lt;/tt&amp;gt; als Stringende. Der prinzipielle Weg ist daher identisch zum  Lesen von Bytes, wobei auf die [[FAQ#Wie funktioniert String-Verarbeitung in C?|Besonderheiten von Strings]] wie 0-Terminierung geachtet werden muss.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
size_t my_string_length (const char *addr)&lt;br /&gt;
{&lt;br /&gt;
    size_t length = 0;&lt;br /&gt;
&lt;br /&gt;
    while (pgm_read_byte (addr++))&lt;br /&gt;
    {&lt;br /&gt;
        length++;&lt;br /&gt;
    }&lt;br /&gt;
    return length;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Unterstützung des Programmierers steht das Repertoire der str-Funktionen auch in jeweils eine Variante zur Verfügung, die mit dem Flash-Speicher arbeiten kann. Die Funktionsnamen tragen den Suffix &amp;lt;tt&amp;gt;_P&amp;lt;/tt&amp;gt;. Darüber hinaus gibt es das Makro &amp;lt;tt&amp;gt;PSTR&amp;lt;/tt&amp;gt;, das ein String-Literal im Flash-Speicher ablegt und die Adresse des Strings liefert:&lt;br /&gt;
&lt;br /&gt;
Die nachfolgende Funktion liefert 0 zurück, wenn string_im_ram gleich &amp;quot;Hallo Welt&amp;quot; ist. Mit strcmp (String Compare) können wir zwei Strings vergleichen. Der Rückgabewert kann hierbei folgende Werte haben:&amp;lt;br&amp;gt;&lt;br /&gt;
    0 die Strings sind gleich&lt;br /&gt;
    &amp;gt;0 das erste ungleiche Zeichen in string_im_ram ist größer als in &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
    &amp;lt;0 das erste ungleiche Zeichen in string_im_ram ist kleiner als in &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int foo (const char *string_im_ram)&lt;br /&gt;
{&lt;br /&gt;
    return strcmp_P (string_im_ram, PSTR (&amp;quot;Hallo Welt&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist, dass &amp;lt;tt&amp;gt;PSTR&amp;lt;/tt&amp;gt; nur innerhalb von Funktionen verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
; Array aus Strings:&lt;br /&gt;
&lt;br /&gt;
Arrays aus Strings im Flash-Speicher werden in zwei Schritten angelegt:&lt;br /&gt;
&lt;br /&gt;
# Zuerst die einzelnen Elemente des Arrays und&lt;br /&gt;
# im Anschluss ein Array, in dem die Startaddressen der Strings abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Zum Auslesen wird zuerst die Adresse des gewünschten Elements aus dem Array im Flash-Speicher gelesen, die im Anschluss dazu genutzt wird, um auf das Element (den String) selbst zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static const char str1[] PROGMEM = &amp;quot;Hund&amp;quot;;&lt;br /&gt;
static const char str2[] PROGMEM = &amp;quot;Katze&amp;quot;;&lt;br /&gt;
static const char str3[] PROGMEM = &amp;quot;Maus&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
const char * const array[] PROGMEM = &lt;br /&gt;
{&lt;br /&gt;
   str1, str2, str3&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Liest den i-ten String von array[] und kopiert ihn ins RAM nach buf[]&lt;br /&gt;
void read_string (char *buf, size_t i)&lt;br /&gt;
{&lt;br /&gt;
    // Lese die Adresse des i-ten Strings aus array[]&lt;br /&gt;
    const char *parray = (const char*) pgm_read_ptr (&amp;amp;array[i]);&lt;br /&gt;
&lt;br /&gt;
    // Kopiere den Inhalt der Zeichenkette vom Flash ins RAM&lt;br /&gt;
    strcpy_P (buf, parray);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, die Strings in einem 2-dimensionalen char-Array abzulegen anstatt deren Adresse in einem 1-dimensionalen Adress-Array zu speichern.&lt;br /&gt;
&lt;br /&gt;
Vorteil ist, dass der Code einfacher wird.  Nachteil ist, dass bei unterschiedlich langen Strings Speicherplatz verschwendet wird, weil sich die Array-Dimension and der Länge des längsten Strings orientieret.  Bei in etwa gleich langen Strings kann es aber sogar Speicherplatz sparen, denn es die Adressen der einzelnen Strings müssen nicht abgespeichert werden.&amp;lt;ref&amp;gt;In unserem Hund-Katze-Maus Beispiel belegt die erste Variante 22 Bytes Daten und 18 Bytes Code, die zweite Variante mit 2-dimensionalem Array belegt 18 Bytes Daten und 20 Bytes Code. Gemessen wurde mit avr-gcc 4.8 -Os für ATmega8.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Die &amp;quot;6&amp;quot; ist 1 plus die Länge des längsten Strings (&amp;quot;Katze&amp;quot;)&lt;br /&gt;
const char array[][6] PROGMEM = &lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Hund&amp;quot;, &amp;quot;Katze&amp;quot;, &amp;quot;Maus&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Liest den i-ten String von array[] und kopiert ihn ins RAM nach buf[]&lt;br /&gt;
void read_string (char *buf, size_t i)&lt;br /&gt;
{&lt;br /&gt;
    // Kopiere den Inhalt der i-ten Zeichenkette vom Flash ins RAM&lt;br /&gt;
    strcpy_P (buf, array[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch die avr-libc FAQ: [http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_rom_array How do I put an array of strings completely in ROM?]&lt;br /&gt;
&lt;br /&gt;
=== Warum so kompliziert? ===&lt;br /&gt;
&lt;br /&gt;
Zu dem Thema, warum die Verabeitung von Werten aus dem Flash-Speicher so kompliziert ist, sei hier nur kurz erläutert: Die Harvard-Architektur des AVR weist getrennte Adressräume für Programm (Flash) und Datenspeicher (RAM) auf. Der C-Standard sieht keine unterschiedlichen Adressräume vor.&lt;br /&gt;
&lt;br /&gt;
Hat man zum Beispiel eine Funktion string_an_uart (const char* s) und übergibt an diese Funktion die Adresse einer Zeichenkette, dann weiß die Funktion nicht, ob die Adresse in den Flash-Speicher oder das RAM zeigt. Weder aus dem Pointer-Wert, also dem Zahlenwert, noch aus dem &amp;quot;const&amp;quot; kann auf den Ort der Ablage geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Einige AVR-Compiler bilden die Harvard-Architektur ab, indem sie in einen Pointer nicht nur die Adresse speichern, sondern auch den Ablageort wie &#039;&#039;Flash&#039;&#039; oder &#039;&#039;RAM&#039;&#039;. In einem Aufruf einer Funktion wird dann bei Pointer-Parametern neben der Adresse auch der Speicherbereich, auf den der Pointer zeigt, übergeben.&lt;br /&gt;
&lt;br /&gt;
Dies hat jedoch auch Nachteile, denn bei jedem Zugriff über einen Zeiger muss zur &#039;&#039;Laufzeit&#039;&#039; entschieden werden, wie der Zugriff auszuführen ist und entsprechend länglicher und langsamer wird der erzeugte Code.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/index.html Dokumentation der avr-libc] Abschnitte Modules/Program Space String Utilities und Abschnitt Modules/Bootloader Support Utilities&lt;br /&gt;
&lt;br /&gt;
=== Datenzugriff &amp;gt;64kiB ===&lt;br /&gt;
&lt;br /&gt;
Die Zeiger beim avr-gcc sind nur 16 Bit breit, können somit also nur 64kiB Datenspeicher adressieren. Darauf sind auch alle Funktion der libc ausgelegt, welche auf _P enden. Als Funktionspointer können sie beim AVR bis zu 128 kiB Programmspeicher adressieren, weil Funktionsadressen immer 16-Bit Worte adressieren und nicht Bytes. Der Zugriff auf den RAM ist mit maximal 16kiB durch 16 Bit Poiinter nicht begrenzt. Um Zugriff jenseits von 64KiB zu bewerkstelligen gibt es mehrere Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Address-Spaces wie &amp;lt;tt&amp;gt;__flash1&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt;, siehe Abschnitt &amp;quot;[[#Jenseits von flash|Jenseits von __flash]]&amp;quot;.&lt;br /&gt;
* Die Funktionen bzw. Makros &amp;lt;tt&amp;gt;pgm_read_xxx_far&amp;lt;/tt&amp;gt; der AVR-Libc ab Version 1.8.0, wie im folgenden beschrieben. Dafür gibt es die Funktion pgm_get_far_address(), um 32-Bit Pointer eines Objekts zu erhalten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//===================================================================&lt;br /&gt;
// Define an additional section, which will be placed after all others&lt;br /&gt;
//--------------------------------------------------------------------&lt;br /&gt;
#define FAR_SECTION   __attribute__((__section__(&amp;quot;.far_section&amp;quot;)))&lt;br /&gt;
//--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
//====================================================================&lt;br /&gt;
// Just an example&lt;br /&gt;
//====================================================================&lt;br /&gt;
&lt;br /&gt;
const char MyString[] FAR_SECTION = &amp;quot;Hier liegt mein FAR-Teststring!&amp;quot;;&lt;br /&gt;
const char MyBmp64[]  FAR_SECTION = {0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x00};&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  uint32_t ptr = pgm_get_far_address(MyString);&lt;br /&gt;
  char MyChar;&lt;br /&gt;
  DDRC = 0xFF;&lt;br /&gt;
  do {&lt;br /&gt;
    MyChar = pgm_read_byte_far(ptr++);&lt;br /&gt;
    PORTC  = MyChar;&lt;br /&gt;
  } while(MyChar);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
D.h. man muss&lt;br /&gt;
* Die Definition der neuen Section &amp;lt;tt&amp;gt;FAR_SECTION&amp;lt;/tt&amp;gt; einfügen&lt;br /&gt;
* Die konstanten Daten mit dieser Section kennzeichnen&lt;br /&gt;
&lt;br /&gt;
Dem Linker muss man über diese Section nichts mitteilen, er fügt diese automatisch nach allen bestehenden sections im Flash ein. Der Zugriff auf diese Variablen kann nur mittels direkter Pointerarithmetik erfolgen, eine Indizierung von Arrays mit variablem Index ist nicht möglich. Dabei muss die Größe des Datentyps immer manuell berücksichtigt werden, denn der Pointer ist immer ein Bytepointer!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int n=3;&lt;br /&gt;
MyChar = pgm_read_byte_far(pgm_get_far_address(MyBmp64)+n*sizeof(char));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei gibt es einige praktische Probleme.&lt;br /&gt;
* Beim recht alten AVR-Studio 4.18 wird die Größe des belegten FLASH-Speichers nicht korrekt angezeigt, die Daten landen aber im HEX-File.&lt;br /&gt;
* beim moderneren Atmelstudio 6.2 sieht man in der Consolenausgabe die richtige Größe, welche von avr-size ermittelt wurde, diese wird aber dann in der 2. Ausgabe durch Atmelstudio falsch dargestellt&lt;br /&gt;
* Die Arduino-IDE rechnet richtig, siehe dieser [https://www.mikrocontroller.net/topic/511511?goto=6568945#6568945 Forumsbeitrag].&lt;br /&gt;
&lt;br /&gt;
== Flash mit __flash und Embedded-C ==&lt;br /&gt;
&lt;br /&gt;
Ab Version 4.7 unterstützt avr-gcc &#039;&#039;Adress-Spaces&#039;&#039; gemäß dem Embedded-C Dokument ISO/IEC TR18037.  Der geläufigste Adress-Space ist &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt;, der im Gegensatz zu &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; kein GCC-Attribut ist, sondern ein Qualifier und damit syntaktisch ähnlich verwendet wird wie &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt; oder &amp;lt;tt&amp;gt;volatile&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
GCC kennt keine eigene Option zum Aktivieren von Embedded-C, es wird als GNU-C Erweiterung behandelt. Daher müssen C-Module, die Address-Spaces verwenden, mit &amp;lt;tt&amp;gt;-std=gnu99&amp;lt;/tt&amp;gt; o.ä. compiliert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static const __flash int value = 10;&lt;br /&gt;
&lt;br /&gt;
int get_value (void)&lt;br /&gt;
{&lt;br /&gt;
  return value;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Im Gegensatz zu &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; sind keine speziellen Bibliotheksfunktionen oder -makros für den Zugriff mehr notwendig: Der Code zum Lesen der Variable ist &amp;quot;normales&amp;quot; C.&lt;br /&gt;
# Die Variable wird im richtigen Speicherbereich (Flash) angelegt.&lt;br /&gt;
# &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; ist nur zusammen mit read-only Objekten oder Zeigern, d.h. nur zusammen mit &amp;lt;tt&amp;gt;const&amp;lt;/tt&amp;gt;, erlaubt.&lt;br /&gt;
# Zugriffe wie im obigen Beispiel können (weg)optimiert werden.  Das Beispiel entspricht einem &amp;quot;&amp;lt;tt&amp;gt;return 10&amp;lt;/tt&amp;gt;&amp;quot;.  Es besteht keine Notwendigkeit, für &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; überhaupt Flash-Speicher zu reservieren.&lt;br /&gt;
&lt;br /&gt;
Auch Zeiger-Indirektionen sind problemlos möglich.  Zu beachten ist, dass &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; auf der richtigen Seite des &amp;quot;&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&amp;quot; in der Zeigerdeklaration bzw. -definition steht:&lt;br /&gt;
* &#039;&#039;&#039;Rechts vom &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;:&#039;&#039;&#039; Der Zeiger selbst liegt im Flash&lt;br /&gt;
* &#039;&#039;&#039;Links vom &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;:&#039;&#039;&#039; Der Zeiger enthält eine Flash-Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// val ist eine Variable im Flash&lt;br /&gt;
const __flash int val = 42;&lt;br /&gt;
&lt;br /&gt;
// pval liegt auch im Flash und enthält die Adresse von val&lt;br /&gt;
const __flash int* const __flash pval = &amp;amp;val;&lt;br /&gt;
&lt;br /&gt;
int get_val (void)&lt;br /&gt;
{&lt;br /&gt;
  // liest den Wert von val über die in pval abgelegte Adresse&lt;br /&gt;
  return *pval;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blöcke ===&lt;br /&gt;
&lt;br /&gt;
Um Speicherbereiche vom Flash in den RAM zu kopieren, gibt es zwei Möglichkeiten: Zum einen können wie bei &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; beschreiben die Funktionen der avr-libc wie &amp;lt;tt&amp;gt;memcpy_P&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;memcmp_P&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;movmem_P&amp;lt;/tt&amp;gt;, etc. verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Eine Datenstruktur&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    int id;&lt;br /&gt;
    char buf[10];&lt;br /&gt;
} data_t;&lt;br /&gt;
&lt;br /&gt;
extern void uart_send (const void*, size_t);&lt;br /&gt;
&lt;br /&gt;
void send_data (const __flash data_t *pdata)&lt;br /&gt;
{&lt;br /&gt;
    // buf wird auf dem Stack angelegt&lt;br /&gt;
    data_t buf;&lt;br /&gt;
    &lt;br /&gt;
    // Kopiere Daten vom Flash nach buf ins RAM&lt;br /&gt;
    memcpy_P (&amp;amp;buf, pdata, sizeof (data_t));&lt;br /&gt;
 &lt;br /&gt;
    // Sende die Daten in buf&lt;br /&gt;
    uart_send (&amp;amp;buf, sizeof (data_t));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum anderen kann eine Struktur auch über direktes Kopieren ins RAM geladen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Eine Datenstruktur&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    int id;&lt;br /&gt;
    char buf[10];&lt;br /&gt;
} data_t;&lt;br /&gt;
&lt;br /&gt;
extern void uart_send (const void*, size_t);&lt;br /&gt;
&lt;br /&gt;
void send_data (const __flash data_t *pdata)&lt;br /&gt;
{&lt;br /&gt;
    // Kopiere Daten ins RAM.  buf wird auf dem Stack angelegt&lt;br /&gt;
    const data_t buf = *pdata;&lt;br /&gt;
    &lt;br /&gt;
    // Verwendet die Daten in buf&lt;br /&gt;
    uart_send (&amp;amp;buf, sizeof (data_t));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings ===&lt;br /&gt;
&lt;br /&gt;
Natürlich können auch Strings im Flash abgelegt werden und auch mit Funktionen wie &amp;lt;tt&amp;gt;strcpy_P&amp;lt;/tt&amp;gt; aus der avr-libc verarbeitet werden.  Zudem ist es möglich, Flash-Zeiger mit der Adresse eines String-Literals zu initialisieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define FSTR(X) ((const __flash char[]) { X } )&lt;br /&gt;
&lt;br /&gt;
const __flash char * const __flash array[] = &lt;br /&gt;
{&lt;br /&gt;
    FSTR (&amp;quot;Hund&amp;quot;), FSTR (&amp;quot;Katze&amp;quot;), FSTR (&amp;quot;Maus&amp;quot;)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
size_t get_len (uint8_t tier)&lt;br /&gt;
{&lt;br /&gt;
    return strlen_P (array[tier]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leider sieht der Embedded-C Draft nicht vor, String-Literale direkt in einem anderen Adress-Space als &#039;&#039;generic&#039;&#039; anzulegen, so dass hier der Umweg über &amp;lt;tt&amp;gt;FSTR&amp;lt;/tt&amp;gt; genommen werden muss.  Dieses Konstrukt ist nur ausserhalb von Funktionen möglich und kann daher nicht als Ersatz für &amp;lt;tt&amp;gt;PSTR&amp;lt;/tt&amp;gt; aus der avr-libc dienen.&lt;br /&gt;
&lt;br /&gt;
Soll &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; ein 2-dimensonales Array sein anstatt ein 1-dimensionales Array von Zeigern, dann geht das ohne große Verrenkungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Die 6 ergibt sich aus 1 plus der Länge des längsten Strings &amp;quot;Katze&amp;quot;&lt;br /&gt;
const __flash char array[][6] = &lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Hund&amp;quot;, &amp;quot;Katze&amp;quot;, &amp;quot;Maus&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiters besteht die Möglichkeit, &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; analog anzulegen, wie man es mit &amp;lt;tt&amp;gt;PROGMEM&amp;lt;/tt&amp;gt; machen würde:  Jeder String wird explizit angelegt und seine Adresse bei der Initialisierung von &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; verwendet.  Dies entspricht dem ersten Beispiel eines 1-dimensionalen Zeigerarrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static const __flash char strHund[]  = &amp;quot;Hund&amp;quot;;&lt;br /&gt;
static const __flash char strKatze[] = &amp;quot;Katze&amp;quot;;&lt;br /&gt;
static const __flash char strMaus[]  = &amp;quot;Maus&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
const __flash char * const __flash array[] = &lt;br /&gt;
{&lt;br /&gt;
    strHund, strKatze, strMaus&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Casts ===&lt;br /&gt;
&lt;br /&gt;
Embedded C fordert, dass zwei Adress-Spaces entweder disjunkt sind – d.h. sie enthalten keine gemeinsamen Adressen – oder aber ein Space komplett im anderen enthalten ist, also eine Teilmengen-Beziehung besteht.  Die Adress-Spaces von avr-gcc sind so implementiert, dass jeder Space Teilmenge jedes anderes ist.  Zwar haben Spaces wie RAM und Flash physikalisch keinen Speicherbereich gemein, allerdings ermöglicht diese Implementierung das Casten von Zeigern zu unterschiedlichen Adress-Spaces&amp;lt;ref&amp;gt;Im Gegensatz zu einem Attribute wie &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; ist ein (Adress Space) Qualifier Teil des Zeiger-Typs.&amp;lt;/ref&amp;gt;:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdbool.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
char read_char (const char *address, bool data_in_flash)&lt;br /&gt;
{&lt;br /&gt;
    if (data_in_flash)&lt;br /&gt;
        return *(const __flash char*) address;&lt;br /&gt;
    else&lt;br /&gt;
        return *address;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Cast selbst erzeugt keinen zusätzlichen Code, da eine RAM-Adresse und eine Flash-Adresse die gleiche Binärdarstellung haben.  Allerdings wird über den nach &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; gecasteten Zeiger anders zugegriffen, nämlich per LPM.&lt;br /&gt;
&lt;br /&gt;
=== Jenseits von __flash ===&lt;br /&gt;
&lt;br /&gt;
Ausser &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; gibt es auch folgende Address-Spaces:&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt;&#039;&#039;N&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt;&#039;&#039;N&#039;&#039; mit &#039;&#039;N&#039;&#039; = 1..5 sind fünf weitere Spaces, die analog zu &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; funktionieren und deren Zeiger ebenfalls 16 Bit breit sind.  avr-gcc erwartet, dass die zugehörigen Daten, welche in die Section &amp;lt;tt&amp;gt;.progmem&amp;lt;/tt&amp;gt;&#039;&#039;N&#039;&#039;&amp;lt;tt&amp;gt;.data&amp;lt;/tt&amp;gt; abgelegt werden, so lokatiert sind, dass das high-Byte der Adresse (Bits 16..23) gerade &#039;&#039;N&#039;&#039; ist.&lt;br /&gt;
&lt;br /&gt;
Weil Daten- und Code-Layout höchst projektspezifisch sind, werden diese Sections im Standard Linker-Skript nicht beschrieben.  Um funktionsfähigen Code zu erhalten, muss daher ein eigenes Linker-Skript zur Verfügung gestellt werden, das diese Sections beschreibt, oder es kann eine Erweiterung des Standard Skripts bereitgestellt werden falls dies möglich ist.&lt;br /&gt;
&lt;br /&gt;
;Beispiel: Eine Applikation, die &amp;lt;tt&amp;gt;__flash2&amp;lt;/tt&amp;gt; verwendet. Die zugehörende Section &amp;lt;tt&amp;gt;.progmem2.data&amp;lt;/tt&amp;gt; wird hinter &amp;lt;tt&amp;gt;.text&amp;lt;/tt&amp;gt; angeordnet aber vor den Initializern für &amp;lt;tt&amp;gt;.data&amp;lt;/tt&amp;gt;.  Dazu wird beim Linken das ld-Skript Fragment per &amp;lt;tt&amp;gt;-Tflash12.ld&amp;lt;/tt&amp;gt; angegeben, welches dann an der gewünschten Stelle in das default Skript eingefügt wird:&lt;br /&gt;
:{| &amp;lt;!-- Tabelle bitte für korrekte Einrückung belassen --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
SECTIONS&lt;br /&gt;
{&lt;br /&gt;
    .flash2 :&lt;br /&gt;
    {&lt;br /&gt;
        . = MAX (ABSOLUTE(0x20000), .);&lt;br /&gt;
        PROVIDE (__flash2_start = .);&lt;br /&gt;
        . = ALIGN(2);&lt;br /&gt;
        *(.flash2.text*)&lt;br /&gt;
        *(.progmem2.data*)&lt;br /&gt;
        PROVIDE (__flash2_end = .);&lt;br /&gt;
&lt;br /&gt;
        ASSERT (__flash2_start == __flash2_end || __flash2_start &amp;gt;= ABSOLUTE(0x20000),&lt;br /&gt;
                &amp;quot;__flash2 data in .progmem2.data below 0x20000&amp;quot;);&lt;br /&gt;
        ASSERT (__flash2_start == __flash2_end || __flash2_end &amp;lt;= ABSOLUTE(0x30000),&lt;br /&gt;
                &amp;quot;__flash2 data in .progmem2.data exceeds 0x30000&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
INSERT AFTER .text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Dieser Address-Space implementiert 3-Byte Zeiger und unterstützt Lesen über 64KiB-Segmentgrenzen hinweg.  Das MSB (Bit 23) gibt dabei an, ob der &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt;-Zeiger eine Flash-Adresse enthält (Bit23 = 0) oder eine RAM-Adresse (Bit23 = 1), was folgenden Code erlaubt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const __memx int a_flash = 42;&lt;br /&gt;
const        int a_ram   = 100;&lt;br /&gt;
&lt;br /&gt;
int get_a (const __memx int* pa)&lt;br /&gt;
{&lt;br /&gt;
    return *pa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
    return get_a (&amp;amp;a_flash) + get_a (&amp;amp;a_ram);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies bedeutet, dass erst zur &#039;&#039;Laufzeit&#039;&#039; entschieden werden kann, ob &amp;lt;tt&amp;gt;get_a&amp;lt;/tt&amp;gt; die Daten aus dem RAM oder aus dem Flash lesen soll, was &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt; im Vergleich zu den anderen Address-Spaces langsamer macht. Ausserdem ist zu beachten, dass &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt;-Zeiger zwar 24-Bit Zeiger sind, die zugrundeliegende Adress-Arithmetik jedoch gemäß dem C-Standard erfolgt, also als 16-Bit Arithmetik. Bestehende Funktion der avr-libc wie z.B. printf_P funktionieren damit ebensowenig wie printf! Wenn man &amp;lt;tt&amp;gt;__memx&amp;lt;/tt&amp;gt; verwenden will, braucht man dafür eigene Funktionen.&lt;br /&gt;
&lt;br /&gt;
=== __flash, progmem und Portierbarkeit ===&lt;br /&gt;
&lt;br /&gt;
Da ab er aktuellen Compilerversion 4.7 sowohl &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; als auch &amp;lt;tt&amp;gt;PROGMEM&amp;lt;/tt&amp;gt; und die &amp;lt;tt&amp;gt;pgm_read&amp;lt;/tt&amp;gt;-Funktionen zur Verfügung stehen, ergibt sich die Frage, welche Variante &amp;quot;besser&amp;quot; ist und wie zwischen ihnen hin- und her zu portieren ist.&lt;br /&gt;
&lt;br /&gt;
Zunächst sei erwähnt, dass &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; kein Ersatz für &amp;lt;tt&amp;gt;PROGMEM&amp;lt;/tt&amp;gt; ist, sondern lediglich eine Alternative dazu.  Das &amp;quot;alte&amp;quot; progmem wird weiterhin mir gleicher Semantik unterstützt, so dass alter Code ohne Änderungen mit den neueren Compilerversionen übersetzbar bleibt.&lt;br /&gt;
&lt;br /&gt;
Von der Codegüte her dürften sich keine großen Unterschiede ergeben.  Es ist nicht zu erwarten, dass die eine oder die andere Variante wesentlich besseren oder schlechteren Code erzeugt — von einer Ausnahme abgesehen:  Der Wert beim Zugriff ist zur Compilezeit bekannt und kann daher eliminiert werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static const __flash char x[] = { &#039;A&#039;, &#039;V&#039;, &#039;R&#039; };&lt;br /&gt;
&lt;br /&gt;
char foo (void)&lt;br /&gt;
{&lt;br /&gt;
    return x[2];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dies wird übersetzt wie &amp;quot;&amp;lt;tt&amp;gt;return &#039;R&#039;;&amp;lt;/tt&amp;gt;&amp;quot;, und das Array &amp;lt;tt&amp;gt;x[]&amp;lt;/tt&amp;gt; kann komplett wegoptimiert werden und entfallen.&lt;br /&gt;
&lt;br /&gt;
==== progmem → __flash ====&lt;br /&gt;
&lt;br /&gt;
Portierung in diese Richtung bedeutet, alten Code anzupassen.  Zwingend ist die Portierung nicht, da &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; weiterhin unterstützt wird.&lt;br /&gt;
Allerdings ist eine Quelle mit &amp;lt;tt&amp;gt;__flash&amp;lt;/tt&amp;gt; besser lesbar, denn der Code wird von den &amp;lt;tt&amp;gt;pgm_read&amp;lt;/tt&amp;gt;-Funktionen befreit, die vor allem bei Mehrfach-Indirektion den Code ziemlich verunstalten und unleserlich machen können.&lt;br /&gt;
Weiterer Vorteil von &amp;lt;tt&amp;gt;_flash&amp;lt;/tt&amp;gt; ist, daß eine striktere Typprüfung erfolgen kann.&lt;br /&gt;
&lt;br /&gt;
Eine Portierung wird man in zwei Schritten vornehmen:&lt;br /&gt;
&lt;br /&gt;
;1. Definitionen von Flash-Variablen werden angepasst:&lt;br /&gt;
&lt;br /&gt;
Vorher:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
static const char hund[]  PROGMEM = &amp;quot;Hund&amp;quot;;&lt;br /&gt;
static const char katze[] PROGMEM = &amp;quot;Katze&amp;quot;;&lt;br /&gt;
static const char maus[]  PROGMEM = &amp;quot;Maus&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
const char * const tier[] PROGMEM = &lt;br /&gt;
{&lt;br /&gt;
   hund, katze, maus&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nachher:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static const __flash char hund[]  = &amp;quot;Hund&amp;quot;;&lt;br /&gt;
static const __flash char katze[] = &amp;quot;Katze&amp;quot;;&lt;br /&gt;
static const __flash char maus[]  = &amp;quot;Maus&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
const __flash char * const __flash tier[] = &lt;br /&gt;
{&lt;br /&gt;
   hund, katze, maus&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Header &amp;lt;tt&amp;gt;avr/pgmspace.h&amp;lt;/tt&amp;gt; wird nicht mehr benötigt.  Im Gegensatz zu &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; müssen Qualifier immer links von der definierten Variablen stehen; bei Attributen wie &amp;lt;tt&amp;gt;progmem&amp;lt;/tt&amp;gt; ist das mehr oder weniger egal.&lt;br /&gt;
&lt;br /&gt;
Nachdem diese Anpassung erfolgreich abgeschlossen ist, folgt Schritt&lt;br /&gt;
&lt;br /&gt;
; 2. Der Code wird von &amp;lt;tt&amp;gt;pgm_read&amp;lt;/tt&amp;gt;-Aufrufen bereinigt:&lt;br /&gt;
&lt;br /&gt;
Vorher:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
extern const char *tier[];&lt;br /&gt;
 &lt;br /&gt;
char first_letter (uint8_t i)&lt;br /&gt;
{&lt;br /&gt;
    const char* ptier = (const char*) pgm_read_word (&amp;amp;tier[i]);&lt;br /&gt;
    return (char) pgm_read_byte (&amp;amp;ptier[0]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nachher:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
extern const __flash char * const __flash tier[];&lt;br /&gt;
 &lt;br /&gt;
char first_letter (uint8_t i)&lt;br /&gt;
{&lt;br /&gt;
    return tier[i][0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dateien direkt im Flash einbinden ==&lt;br /&gt;
&lt;br /&gt;
Wenn man größere Dateien direkt im Programm einbinden will, ohne sie vorher in C Quelltext umzuwandeln, muss man das mit dem Linker machen. Wie das geht steht hier.&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/webdoc/avrlibcreferencemanual/FAQ_1faq_binarydata.html Atmel, avr gcc Dokumentation]&lt;br /&gt;
* [http://nongnu.org/avr-libc/user-manual/FAQ.html#faq_binarydata Nongnu avr gcc Dokumentation]&lt;br /&gt;
&lt;br /&gt;
Wie man das dann praktisch umsetzt, sieht man in diesem Beitrag.&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/361429?goto=4056910#4056910 Forumsbeitrag]: Binärdateien mittels Linker einbinden&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/361429?goto=4056910#4056947 Forumsbeitrag]: Ein kleines Tool zum Umwandeln von Binärdateien in C-Quelltext.&lt;br /&gt;
&lt;br /&gt;
== Flash in der Anwendung schreiben ==&lt;br /&gt;
&lt;br /&gt;
Bei AVRs mit &amp;quot;self-programming&amp;quot;-Option – auch bekannt als [[Bootloader]]-Support – können Teile des Flash-Speichers vom Anwendungsprogramm beschrieben werden. Dies ist nur möglich, wenn die Schreibfunktion in einem besonderen Speicherbereich, der Boot-Section des Programmspeichers/Flash, abgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Bei einigen kleinen AVRs gibt es keine gesonderte Boot-Section, bei diesen kann der Flashspeicher von jeder Stelle des Programms geschrieben werden. Für Details sei hier auf das jeweilige Controller-Datenblatt und die Erläuterungen zum Modul boot.h der avr-libc verwiesen. Es existieren auch Application-Notes dazu bei atmel.com, die auf avr-gcc-Code übertragbar sind.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* Forumsbeitrag [http://www.mikrocontroller.net/topic/163632#1561622 Daten in Programmspeicher speichern]&lt;br /&gt;
&lt;br /&gt;
== EEPROM ==&lt;br /&gt;
&lt;br /&gt;
Möchte man Werte aus einem Programm heraus so speichern, dass sie auch nach dem Abschalten der Versorgungsspannung noch erhalten bleiben und nach dem Wiederherstellen der Versorgungsspannung bei erneutem Programmstart wieder zur Verfügung stehen, dann benutzt man das EEPROM.&lt;br /&gt;
&lt;br /&gt;
Schreib- und Lesezugriffe auf den EEPROM-Speicher erfolgen über die im Modul eeprom.h der avr-libc definierten Funktionen. Mit diesen Funktionen können einzelne Bytes, Datenworte (16 Bit), Fließkommawerte (32 Bit, single-precision, float) und Datenblöcke geschrieben und gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen kümmern sich auch um diverse Details, die bei der Benutzung des EEPROMs normalerweise notwendig sind:&lt;br /&gt;
* EEPROM-Operationen sind im Vergleich relativ langsam. Man muss daher darauf achten, dass eine vorhergehende Operation abgeschlossen ist, ehe die nächste Operation mit dem EEPROM gestartet wird. Die in der avr-libc implementierten Funktionen aus eeprom.h berücksichtigten dies. Soll beim Aufruf einer EEPROM-Funktion sichergestellt werden, dass diese nicht intern in einer Warteschleife auf den Abschluss der vorherigen Operation wartet, kann vorher per eeprom_is_ready testen, ob der Zugriff auf den EEPROM-Speicher sofort möglich ist.&lt;br /&gt;
* Es ist darauf zu achten, dass die EEPROM-Funktionen nicht durch einen Interrupt unterbrochen werden. Einige Phasen des Zugriffs sind zeitkritisch und müssen in einer definierten bzw. begrenzten Anzahl von Takten durchgeführt werden. Durch einen unterbrechenden Interrupt würde diese Restriktion nicht mehr eingehalten. Auch dieses Detail wird von den avr-libc Funktionen berücksichtigt, so dass man sich als C-Programmierer nicht darum kümmern muss. Innerhalb der Funktionen werden Interrupts vor der &amp;quot;EEPROM-Sequenz&amp;quot; global deaktiviert und im Anschluss, falls vorher auch schon eingeschaltet, wieder aktiviert.&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass der EEPROM-Speicher nur eine begrenzte Anzahl von Schreibzugriffen zulässt. Beschreibt man eine EEPROM-Zelle öfter als die im Datenblatt zugesicherte Anzahl (typisch 100.000), wird die Funktion der Zelle nicht mehr garantiert. Dies gilt für jede einzelne Zelle. &lt;br /&gt;
&lt;br /&gt;
Bei geschickter Programmierung (z.&amp;amp;nbsp;B. Ring-Puffer), bei der die zu beschreibenden Zellen regelmäßig gewechselt werden, kann man eine deutlich höhere Anzahl an Schreibzugriffen, bezogen auf den gesamten EEPROM-Speicher, erreichen. Auf jeden Fall sollte man aber eine Abschätzung über die zu erwartende Lebensdauer des EEPROM durchführen. Wird ein Wert im EEPROM im Durchschnitt nur einmal pro Woche verändert, wird die garantierte Anzahl der Schreibzyklen innerhalb der voraussichtlichen Verwendungszeit des Controllers sicherlich nicht erreicht werden. Welcher Controller ist schon 100000 / 52 = 1923 Jahre im Einsatz? In diesem Fall lohnt es sich daher nicht, erweiterte Programmfunktionen zu implementieren, mit denen die Anzahl der Schreibzugriffe minimiert wird.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit, Schreibzyklen einzusparen, besteht in der Vorabprüfung, ob der zu speichernde Wert im EEPROM bereits enthalten ist und nur veränderte Werte zu schreiben. In aktuelleren Versionen der avr-libc sind bereits Funktionen enthalten, die solche Prüfungen enthalten (eeprom_update_*).&lt;br /&gt;
&lt;br /&gt;
Eine dritte Möglichkeit speichert alle Daten zunächst im RAM, wo sie beliebig oft beschrieben werden können. Nur beim Ausschalten oder beim Ausfall der Stromversorgung werden die Daten in den EEPROM geschrieben. Wie man das richtig macht sieht man im Artikel [[Speicher#EEPROM Schreibzugriffe minimieren | Speicher]].&lt;br /&gt;
&lt;br /&gt;
Lesezugriffe können beliebig oft durchgeführt werden. Sie unterliegen keinen Einschränkungen in Bezug auf deren Anzahl. &lt;br /&gt;
&lt;br /&gt;
=== EEMEM ===&lt;br /&gt;
Um eine Variable im EEPROM anzulegen, stellt die avr-libc das Makro EEMEM zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/eeprom.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Byte */&lt;br /&gt;
uint8_t eeFooByte EEMEM = 123;&lt;br /&gt;
&lt;br /&gt;
/* Wort */&lt;br /&gt;
uint16_t eeFooWord EEMEM = 12345;&lt;br /&gt;
&lt;br /&gt;
/* float */&lt;br /&gt;
float eeFooFloat EEMEM;&lt;br /&gt;
&lt;br /&gt;
/* Byte-Array */&lt;br /&gt;
uint8_t eeFooByteArray1[] EEMEM = { 18, 3, 70 };&lt;br /&gt;
uint8_t eeFooByteArray2[] EEMEM = { 30, 7, 79 };&lt;br /&gt;
&lt;br /&gt;
/* 16-bit unsigned short feld */&lt;br /&gt;
uint16_t eeFooWordArray1[4] EEMEM;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die grundsätzliche Vorgehensweise ist identisch zur Verwendung von PROGMEM. Auch hier erzeugt man sich spezielle attributierte Variablen (EEMEM erledigt das), die vom Compiler/Linker nicht wie normale Variablen behandelt werden. Compiler/Linker kümmern sich zwar darum, dass diesen Variablen eine Adresse zugewiesen wird, diese Adresse ist dann aber die Adresse der &#039;Variablen&#039; im EEPROM. Um die dort gespeicherten Werte zu lesen bzw. zu schreiben, übergibt man diese Adresse an spezielle Funktionen, die die entsprechenden Werte aus dem EEPROM holen bzw. das EEPROM neu beschreiben.&lt;br /&gt;
&lt;br /&gt;
Die mittels EEMEM erzeugten &#039;Variablen&#039; sind also mehr als Platzhalter zu verstehen, denn als echte Variablen. Es geht nur darum, im C-Programm symbolische Namen zur Verfügung zu haben, anstatt mit echten EEPROM-Adressen hantieren zu müssen, etwas, das grundsätzlich aber auch genauso gut möglich ist. Nur muss man sich in diesem Fall dann selbst darum kümmern, dass mehrere &#039;Variablen&#039; ohne Überschneidung im EEPROM angeordnet werden.&lt;br /&gt;
&lt;br /&gt;
=== Bytes lesen/schreiben ===&lt;br /&gt;
&lt;br /&gt;
Die avr-libc Funktion zum Lesen eines Bytes heißt eeprom_read_byte. Parameter ist die Adresse des Bytes im EEPROM. Geschrieben wird über die Funktion eeprom_write_byte mit den Parametern Adresse und Inhalt. Anwendungsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define EEPROM_DEF 0xFF&lt;br /&gt;
&lt;br /&gt;
void eeprom_example (void)&lt;br /&gt;
{&lt;br /&gt;
    uint8_t myByte;&lt;br /&gt;
&lt;br /&gt;
    // myByte lesen (Wert = 123)&lt;br /&gt;
    myByte = eeprom_read_byte (&amp;amp;eeFooByte);&lt;br /&gt;
&lt;br /&gt;
    // der Wert 99 wird im EEPROM an die Adresse der&lt;br /&gt;
    // Variablen eeFooByte geschrieben&lt;br /&gt;
    myByte = 99;&lt;br /&gt;
    eeprom_write_byte(&amp;amp;eeFooByte, myByte); // schreiben&lt;br /&gt;
&lt;br /&gt;
    myByte = eeprom_read_byte (&amp;amp;eeFooByteArray1[1]); &lt;br /&gt;
    // myByte hat nun den Wert 3&lt;br /&gt;
&lt;br /&gt;
    // Beispiel fuer eeprom_update_byte: die EEPROM-Zelle wird nur&lt;br /&gt;
    // dann beschrieben, wenn deren Inhalt sich vom Parameterwert&lt;br /&gt;
    // unterscheidet. In diesem Beispiel erfolgt also kein Schreib-&lt;br /&gt;
    // zugriff, da die Werte gleich sind.&lt;br /&gt;
    eeprom_update_byte(&amp;amp;eeFooByte, myByte);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Beispiel zur &amp;quot;Sicherung&amp;quot; gegen leeres EEPROM nach &amp;quot;Chip Erase&amp;quot;&lt;br /&gt;
    // (z. B. wenn die .eep-Datei nach Programmierung einer neuen Version&lt;br /&gt;
    // des Programms nicht in den EEPROM uebertragen wurde und EESAVE&lt;br /&gt;
    // deaktiviert ist (unprogrammed/1)&lt;br /&gt;
    // &lt;br /&gt;
    // Vorsicht: wenn EESAVE &amp;quot;programmed&amp;quot; ist, hilft diese Sicherung nicht&lt;br /&gt;
    // weiter, da die Speicheraddressen in einem neuen/erweiterten Programm&lt;br /&gt;
    // moeglicherweise verschoben wurden. An der Stelle &amp;amp;eeFooByte steht&lt;br /&gt;
    // dann u.U. der Wert einer anderen Variable aus einer &amp;quot;alten&amp;quot; Version.&lt;br /&gt;
&lt;br /&gt;
    uint8_t fooByteDefault = 222;&lt;br /&gt;
    if ((myByte = eeprom_read_byte (&amp;amp;eeFooByte)) == EEPROM_DEF)&lt;br /&gt;
    {&lt;br /&gt;
        myByte = fooByteDefault;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wort lesen/schreiben ===&lt;br /&gt;
&lt;br /&gt;
Schreiben und Lesen von Datenworten erfolgt analog zur Vorgehensweise bei Bytes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    // lesen&lt;br /&gt;
    uint16_t myWord = eeprom_read_word (&amp;amp;eeFooWord);&lt;br /&gt;
&lt;br /&gt;
    // schreiben&lt;br /&gt;
    eeprom_write_word (&amp;amp;eeFooWord, 2222);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Block lesen/schreiben ===&lt;br /&gt;
&lt;br /&gt;
Lesen und Schreiben von Datenblöcken erfolgt über die Funktionen &amp;lt;code&amp;gt;eeprom_read_block()&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;eeprom_write_block()&amp;lt;/code&amp;gt;. Die Funktionen erwarten drei Parameter: die Adresse der Quell- bzw. Zieldaten im RAM, die EEPROM-Adresse und die Länge des Datenblocks in Bytes als &amp;lt;code&amp;gt;size_t&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t  myByteBuffer[3];&lt;br /&gt;
uint16_t myWordBuffer[4];&lt;br /&gt;
&lt;br /&gt;
void eeprom_block_example (void)&lt;br /&gt;
{&lt;br /&gt;
    /* Datenblock aus EEPROM lesen  */&lt;br /&gt;
&lt;br /&gt;
    /* liest 3 Bytes ab der von eeFooByteArray1 definierten EEPROM-Adresse&lt;br /&gt;
       in das RAM-Array myByteBuffer */&lt;br /&gt;
    eeprom_read_block (myByteBuffer, eeFooByteArray1, 3);&lt;br /&gt;
&lt;br /&gt;
    /* dito mit etwas Absicherung betr. der Länge */&lt;br /&gt;
    eeprom_read_block (myByteBuffer, eeFooByteArray1, sizeof(myByteBuffer));&lt;br /&gt;
&lt;br /&gt;
    /* und nun mit 16-Bit Array */&lt;br /&gt;
    eeprom_read_block (myWordBuffer, eeFooWordArray1, sizeof(myWordBuffer));&lt;br /&gt;
&lt;br /&gt;
    /* Datenblock in EEPROM schreiben */&lt;br /&gt;
    eeprom_write_block (myByteBuffer, eeFooByteArray1, sizeof(myByteBuffer));&lt;br /&gt;
    eeprom_write_block (myWordBuffer, eeFooWordArray1, sizeof(myWordBuffer));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fließkommawerte lesen/schreiben ===&lt;br /&gt;
&lt;br /&gt;
In der avr-libc stehen auch EEPROM-Funktionen für Variablen des Typs float (Fließkommazahlen mit &amp;quot;einfacher&amp;quot; Genauigkeit) zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/eeprom.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
float eeFloat EEMEM = 12.34f;&lt;br /&gt;
&lt;br /&gt;
float void eeprom_float_example(float value)&lt;br /&gt;
{&lt;br /&gt;
   /* float in EEPROM schreiben */&lt;br /&gt;
   eeprom_write_float(&amp;amp;eeFloat, value);&lt;br /&gt;
&lt;br /&gt;
   /* float aus EEPROM lesen */&lt;br /&gt;
   return  eeprom_read_float(&amp;amp;eeFloat);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EEPROM-Speicherabbild in .eep-Datei ===&lt;br /&gt;
&lt;br /&gt;
Mit den zum Compiler gehörenden Werkzeugen kann der aus den Variablendeklarationen abgeleitete EEPROM-Inhalt in eine Datei geschrieben werden. Die übliche Dateiendung ist .eep, Daten im Intel Hex-Format. Damit können Standardwerte für den EEPROM-Inhalt im Quellcode definiert werden. &lt;br /&gt;
&lt;br /&gt;
Makefiles nach WinAVR/MFile-Vorlage enthalten bereits die notwendigen Einstellungen, siehe dazu die Erläuterungen im [[AVR-GCC-Tutorial/Exkurs Makefiles|Exkurs Makefiles]].&lt;br /&gt;
&lt;br /&gt;
Der Inhalt der eep-Datei muss ebenfalls zum Mikrocontroller übertragen werden, wenn die Initialisierungswerte aus der Deklaration vom Programm erwartet werden. Ansonsten enthält der EEPROM-Speicher nach der Übertragung des Programmers mittels ISP abhängig von der Einstellung der EESAVE-Fuse&amp;lt;ref&amp;gt;vgl. Datenblatt Abschnitt Fuse Bits&amp;lt;/ref&amp;gt; nicht die korrekten Werte:&lt;br /&gt;
; EESAVE = 0 (programmed): Die Daten im EEPROM bleiben erhalten. Werden sie nicht neu geschrieben, so enthält das EEPROM evtl. Daten, die nicht mehr zum Programm passen.&lt;br /&gt;
; EESAVE = 1 (unprogrammed): Beim Programmieren werden die Daten im EEPROM gelöscht, also auf 0xff gesetzt.&lt;br /&gt;
&lt;br /&gt;
Als Sicherung kann man im Programm nochmals die Standardwerte vorhalten, beim Lesen auf 0xFF prüfen und gegebenenfalls einen Standardwert nutzen. Das geht natürlich nur, wenn 0xFF selbst nicht als Datenwert vorkommen kann.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define DUTY_CYCLE_DEFAULT 0x80&lt;br /&gt;
&lt;br /&gt;
uint8_t eeDutyCycle EEMEM;   // Platzhalter für EEPROM&lt;br /&gt;
uint8_t DutyCycle;           // die echte Variable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  DutyCycle = eeprom_read_byte( &amp;amp;eeDutyCycle );&lt;br /&gt;
  if( DutyCycle == 0xFF )                     // das allererste mal. Im EEPROM steht noch kein gültiger Wert&lt;br /&gt;
  {&lt;br /&gt;
    DutyCycle = DUTY_CYCLE_DEFAULT;&lt;br /&gt;
    eeprom_writeByte( &amp;amp;eeDutyCycle, DutyCycle );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Direkter Zugriff auf EEPROM-Adressen ===&lt;br /&gt;
&lt;br /&gt;
Will man direkt auf bestimmte EEPROM Adressen zugreifen, dann sind folgende IAR-kompatiblen Makros &amp;lt;tt&amp;gt;_EEGET&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;_EEPUT&amp;lt;/tt&amp;gt; hilfreich, um sich die Typecasts zu ersparen.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Die nachfolgend gezeigten Makros und Zugriffe auf absolute Adressen sind in Normalfall nicht nötig und nur auf sehr wenige, spezielle Fälle beschränkt! Im Normalfall sollte man auf absolute Adressen möglichst nicht zugreifen und den Compiler seine Arbeit machen lassen, der verwaltet die Variablen und deren Adressen meist besser als der Programmierer. Der Zugriff auf Variablen im EEPROM sollte immer über ihren Namen erfolgen.&lt;br /&gt;
&lt;br /&gt;
Verwendung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/eeprom.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_EEPUT (0x20, 128);              // Byte-Wert 128 an Adresse 0x20 schreiben&lt;br /&gt;
...&lt;br /&gt;
uint8_t val = _EEGET (0x20);     // EEPROM-Wert von Adresse 0x20 lesen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Was steckt dahinter? - EEPROM-Register ===&lt;br /&gt;
Auch wenn es normalerweise keinen Grund gibt, in C selbst an den Steuerregistern herumzuschrauben - die eeprom Funktionen erledigen das alles zuverlässig - der Vollständigkeit halber der registermässige technische Unterbau.&lt;br /&gt;
Um das EEPROM anzusteuern, sind drei Register von Bedeutung:&lt;br /&gt;
;EEAR: Hier werden die Adressen eingetragen zum Schreiben oder Lesen. Dieses Register unterteilt sich nochmal in EEARH und EEARL, da in einem 8-Bit-Register keine 512 Adressen adressiert werden können.&lt;br /&gt;
;EEDR: Hier werden die Daten eingetragen, die geschrieben werden sollen, bzw. es enthält die gelesenen Daten.&lt;br /&gt;
;EECR: Ist das Kontrollregister für das EEPROM&lt;br /&gt;
&lt;br /&gt;
Das EECR steuert den Zugriff auf das EEPROM und ist wie folgt aufgebaut:&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Aufbau des EECR-Registers&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
| 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
| - || - || - ||- || EERIE || EEMWE || EEWE || EERE&lt;br /&gt;
|-&lt;br /&gt;
! Read/Write&lt;br /&gt;
| R || R || R || R || R/W || R/W || R/W || R/W&lt;br /&gt;
|-&lt;br /&gt;
!Init Value&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bedeutung der Bits&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Bit 4-7: nicht belegt&lt;br /&gt;
&lt;br /&gt;
;Bit 3 (EERIE): &#039;&#039;EEPROM Ready Interrupt Enable&#039;&#039;: Wenn das Bit gesetzt ist und globale Interrupts erlaubt sind in Register SREG (Bit 7), wird ein Interrupt ausgelöst nach Beendigung des Schreibzyklus (EEPROM Ready Interrupt). Ist einer der beiden Bits 0, wird kein Interrupt ausgelöst.&lt;br /&gt;
&lt;br /&gt;
;Bit 2 EEMWE): &#039;&#039;EEPROM Master Write Enable&#039;&#039;: Dieses Bit bestimmt, dass, wenn EEWE = 1 gesetzt wird (innerhalb von 4 Taktzyklen), das EEPROM beschrieben wird mit den Daten in EEDR bei Adresse EEAR. Wenn EEMWE = 0 ist und EEWE = 1 gesetzt wird, hat das keine Auswirkungen. Der Schreibvorgang wird dann nicht ausgelöst. Nach 4 Taktzyklen wird das Bit EEMWE automatisch wieder auf 0 gesetzt. Dieses Bit löst den Schreibvorgang nicht aus, es dient sozusagen als Sicherungsbit für EEWE.&lt;br /&gt;
&lt;br /&gt;
;Bit 1 (EEWE): &#039;&#039;EEPROM Write Enable&#039;&#039;: Dieses Bit löst den Schreibvorgang aus, wenn es auf 1 gesetzt wird, sofern vorher EEMWE gesetzt wurde und seitdem nicht mehr als 4 Taktzyklen vergangen sind. Wenn der Schreibvorgang abgeschlossen ist, wird dieses Bit automatisch wieder auf 0 gesetzt und, sofern EERIE gesetzt ist, ein Interrupt ausgelöst. Ein Schreibvorgang sieht typischerweise wie folgt aus:&lt;br /&gt;
:# EEPROM-Bereitschaft abwarten (EEWE=0) &lt;br /&gt;
:# Adresse übergeben an EEAR&lt;br /&gt;
:# Daten übergeben an EEDR&lt;br /&gt;
:# Schreibvorgang auslösen in EECR mit Bit EEMWE=1 und EEWE=1&lt;br /&gt;
:# (Optional) Warten, bis Schreibvorgang abgeschlossen ist&lt;br /&gt;
&lt;br /&gt;
;Bit 0 EERE: &#039;&#039;EEPROM Read Enable&#039;&#039;: Wird dieses Bit auf 1 gesetzt wird das EEPROM an der Adresse in EEAR ausgelesen und die Daten in EEDR gespeichert. Das EEPROM kann nicht ausgelesen werden, wenn bereits eine Schreiboperation gestartet wurde. Es ist daher zu empfehlen, die Bereitschaft vorher zu prüfen. Das EEPROM ist lesebereit, wenn das Bit EEWE=0 ist. Ist der Lesevorgang abgeschlossen, wird das Bit wieder auf 0 gesetzt, und das EEPROM ist für neue Lese- und Schreibbefehle wieder bereit. Ein typischer Lesevorgang kann wie folgt aufgebaut sein:&lt;br /&gt;
:# Bereitschaft zum Lesen prüfen (EEWE=0)&lt;br /&gt;
:# Adresse übergeben an EEAR&lt;br /&gt;
:# Lesezyklus auslösen mit EERE = 1&lt;br /&gt;
:# Warten, bis Lesevorgang abgeschlossen EERE = 0&lt;br /&gt;
:# Daten abholen aus EEDR&lt;br /&gt;
&lt;br /&gt;
= Die Nutzung von sprintf und printf =&lt;br /&gt;
&lt;br /&gt;
Um komfortabel, d.h. formatiert, Ausgaben auf ein Display oder die serielle Schnittstelle zu tätigen, bieten sich &#039;&#039;&#039;sprintf&#039;&#039;&#039; oder &#039;&#039;&#039;printf&#039;&#039;&#039; an. Alle *printf-Varianten sind jedoch ziemlich speicherintensiv und der Einsatz in einem Mikrocontroller mit knappem Speicher muss sorgsam abgewogen werden.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;sprintf&#039;&#039;&#039; wird die Ausgabe zunächst in einem Puffer vorbereitet und anschließend mit einfachen Funktionen zeichenweise ausgegeben. Es liegt in der Verantwortung des Programmierers, genügend Platz im Puffer für die erwarteten Zeichen bereitzuhalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
// nicht dargestellt: Implementierung von uart_puts (vgl. Abschnitt UART)&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
uint16_t counter;&lt;br /&gt;
&lt;br /&gt;
// Ausgabe eines unsigned Integerwertes&lt;br /&gt;
void uart_puti( uint16_t value )&lt;br /&gt;
{&lt;br /&gt;
    uint8_t puffer[20];&lt;br /&gt;
&lt;br /&gt;
    sprintf( puffer, &amp;quot;Zählerstand: %u&amp;quot;, value );&lt;br /&gt;
    uart_puts( puffer );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  counter = 5;&lt;br /&gt;
&lt;br /&gt;
  uart_puti( counter );&lt;br /&gt;
  uart_puti( 42 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weitere elegante Möglichkeit besteht darin, den STREAM stdout (Standardausgabe) auf eine eigene Ausgabefunktion umzuleiten. Dazu wird dem Ausgabemechanismus der C-Bibliothek eine neue Ausgabefunktion bekannt gemacht, deren Aufgabe es ist, ein einzelnes Zeichen auszugeben. Wohin die Ausgabe dann tatsächlich stattfindet, ist Sache der Ausgabefunktion. Im Beispiel unten wird auf UART ausgegeben. Alle anderen, höheren Funktionen wie z.&amp;amp;nbsp;B. &#039;&#039;&#039;printf&#039;&#039;&#039;, greifen letztendlich auf diese primitive Ausgabefunktion zurück. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void uart_init(void);&lt;br /&gt;
&lt;br /&gt;
// a. Deklaration der primitiven Ausgabefunktion&lt;br /&gt;
int uart_putchar(char c, FILE *stream);&lt;br /&gt;
&lt;br /&gt;
// b. Umleiten der Standardausgabe stdout (Teil 1)&lt;br /&gt;
static FILE mystdout = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE );&lt;br /&gt;
&lt;br /&gt;
// c. Definition der Ausgabefunktion&lt;br /&gt;
int uart_putchar( char c, FILE *stream )&lt;br /&gt;
{&lt;br /&gt;
    if( c == &#039;\n&#039; )&lt;br /&gt;
        uart_putchar( &#039;\r&#039;, stream );&lt;br /&gt;
&lt;br /&gt;
    loop_until_bit_is_set( UCSRA, UDRE );&lt;br /&gt;
    UDR = c;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void uart_init(void)&lt;br /&gt;
{&lt;br /&gt;
    /* hier µC spezifischen Code zur Initialisierung */&lt;br /&gt;
    /* des UART einfügen... s.o. im AVR-GCC-Tutorial */&lt;br /&gt;
&lt;br /&gt;
    // Beispiel: &lt;br /&gt;
    //&lt;br /&gt;
    // myAVR Board 1.5 mit externem Quarz Q1 3,6864 MHz&lt;br /&gt;
    // 9600 Baud 8N1&lt;br /&gt;
&lt;br /&gt;
#ifndef F_CPU&lt;br /&gt;
#define F_CPU 3686400&lt;br /&gt;
#endif&lt;br /&gt;
#define UART_BAUD_RATE 9600&lt;br /&gt;
&lt;br /&gt;
// Hilfsmakro zur UBRR-Berechnung (&amp;quot;Formel&amp;quot; laut Datenblatt)&lt;br /&gt;
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)&lt;br /&gt;
&lt;br /&gt;
    UCSRB |= (1&amp;lt;&amp;lt;TXEN) | (1&amp;lt;&amp;lt;RXEN);    // UART TX und RX einschalten&lt;br /&gt;
    UCSRC |= (1&amp;lt;&amp;lt;URSEL)|(3&amp;lt;&amp;lt;UCSZ0);    // Asynchron 8N1 &lt;br /&gt;
 &lt;br /&gt;
    UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) &amp;gt;&amp;gt; 8 );&lt;br /&gt;
    UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    int16_t antwort = 42;&lt;br /&gt;
    uart_init();&lt;br /&gt;
&lt;br /&gt;
    // b. Umleiten der Standardausgabe stdout (Teil 2)&lt;br /&gt;
    stdout = &amp;amp;mystdout;&lt;br /&gt;
&lt;br /&gt;
    // Anwendung&lt;br /&gt;
    printf( &amp;quot;Die Antwort ist %d.\n&amp;quot;, antwort );&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Quelle: avr-libc-user-manual-1.4.3.pdf, S.74&lt;br /&gt;
//         + Ergänzungen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sollen Fließkommazahlen ausgegeben werden, muss im Makefile eine andere (größere) Version der [[FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio|printflib]] eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
= Anmerkungen =&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TODO =&lt;br /&gt;
* Aktualisierung Register- und Bitbeschreibungen an aktuelle AVR&lt;br /&gt;
* &amp;quot;naked&amp;quot;-Funktionen [http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html][http://arduino.stackexchange.com/questions/8758/arduino-interruption-on-pin-change]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:avr-gcc Tutorial| ]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106545</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106545"/>
		<updated>2024-01-08T13:22:33Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112952 112952] || Fix attributes &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;io_low&amp;lt;/code&amp;gt;&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106510</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106510"/>
		<updated>2023-12-17T19:42:22Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Binutils / avr-libc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| 2.42 optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106503</id>
		<title>Avr-gcc Bugs</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Avr-gcc_Bugs&amp;diff=106503"/>
		<updated>2023-12-10T15:21:05Z</updated>

		<summary type="html">&lt;p&gt;Gjlayde: /* Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR107201 107201] || &amp;lt;tt&amp;gt;-nodevicelib&amp;lt;/tt&amp;gt; not working together with &amp;lt;tt&amp;gt;-mmcu=avr*&amp;lt;/tt&amp;gt; devices &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92606 92606] || Invalid merge of symbols in progmem and data sections (WA: &amp;lt;tt&amp;gt;-fno-ipa-icf-variables&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| IPA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR87376 87376] || Miscompilation with __memx and long long addition&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86869 86869] || ICE when taking address of array member of __memx struct pointer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86776 86776] || Need updating for CVE-2017-5753&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86635 86635] || Wrong code with __memx and __gtsf2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81073 81073] || Link failure as C++ misses to instanciate some objects&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80573 80573] || ICE: in assign_temp, at function.c:961&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78707 78707] || ICE: in push_reload, at reload.c:1349 (sscanf_flt-f1.c)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78497 78497] || -save-temps adds -Wimplicit-fallthrough warnings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR68384 68384] || LTO error for global register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67352 67352] || incorrect warning with -Waddr-space-convert and struct in __flash&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65657 65657] || read from __memx tramples function argument&lt;br /&gt;
| → [http://gcc.gnu.org/PR86635 86635]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64331 64331] || avr.c:reg_unused_after uses outdated reg_dead notes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63630 63630] || ICE: Spill fail&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR62084 62084] || ICE: in convert_debug_memory_address (__memx, -g)&lt;br /&gt;
| middle-end → [http://gcc.gnu.org/PR52472 52472]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57597 57597] || ICE: in get_section, Segmentation fault with -fmerge-all-constants&lt;br /&gt;
| varasm&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57482 57482] || --help=optimizers reports a wrong list &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56479 56479] || ICE: can&#039;t allocate two 4-byte variables to &amp;quot;a&amp;quot; for inline asm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56442 56442] || postreload uses clobbered register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/bugzilla/showdependencytree.cgi?id=56183 56183]&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;Problems with register allocation&#039;&#039;&lt;br /&gt;
| meta-bug&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56164 56164] || ICE: spill fail with __flash keyword&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54330 54330] || Wrong optimization for code from fixed-bit.c&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53615 53615] || Buffer overflow in the compiler?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52663 52663] || ICE: in purge_dead_edges, at cfgrtl.c:2462&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52305 52305] || ICE: in avr_print_operand: unknown mode (const_double) &lt;br /&gt;
| asm&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50925 50925]&#039;&#039;&#039; || ICE: spill failure in newlib build&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50739 50739] || nameless error with -fmerge-all-constants&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49775 49775] || ICE: in based_loc_descr&lt;br /&gt;
| dwarf-2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42204 42204]&#039;&#039;&#039; || update_eliminables should be called in reload after something changes &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36571 36571] || Default untyped return for AVR is byte register. &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Binutils / avr-libc ==&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t4&amp;quot; &lt;br /&gt;
!PR||Description||Note&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR31124 31124] || Support new Emulations for Devices with FLMAP&lt;br /&gt;
| optimization &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR16005 16005] || Linker crash with --relax&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13812 13812] || .trampolines location in linker script cause &amp;quot;internal error: out of range error&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12494 12494] || Relaxation leads to wrong code optimization&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| binutils fixed&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21621 21621] || Wrong / missing warning &amp;quot;skipping two-word instruction&amp;quot;&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21849 21849] || Locate .progmemx.* at a higher address&lt;br /&gt;
| 2.29.x&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21683 21683] || Support __gcc_isr pseudo-instruction&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21583 21583] || Move .jumptables to a higher address&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21569 21569] || Merge avr.sc and avrtiny.sc&lt;br /&gt;
| 2.29&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21472 21472] || Add new emulation for ATtiny416 et al. (don&#039;t put .rodata in RAM)&lt;br /&gt;
| 2.29 &lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR21404 21404] || Assertion fail in bfd/elf32-avr.c:2145&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20849 20849] || Don&#039;t put .rodata in RAM on AVR_TINY.&lt;br /&gt;
| 2.28&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20789 20789] || Fix relaxation of negative DIFF relocs.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20254 20254] || Relocs at end of section are not processed with .align.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR20221 20221] || Wrong code with .align and linker relaxation.&lt;br /&gt;
| 2.26&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR15043 15043] || Support -mrmw option for LAC, LAT, LAS and XCH.&lt;br /&gt;
| 2.25&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14058 14058] || Internal overflow error on &amp;gt; 128kB flash&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13899 13899]&#039;&#039;&#039; || Wrong relaxation of R_AVR_16_PM with gs()&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://sourceware.org/PR13697 13697]&#039;&#039;&#039; || Wrong symbol values with --gc-sections and empty .data&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13503 13503] || Support RELOCs to represent a byte&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR13410 13410] || Relocation truncated to fit: R_AVR_13_PCREL against symbol...&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12742 12742] || mingw32 and --enable-lto in Canadian cross build&lt;br /&gt;
| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR12161 12161] || Unconforming ELF file causes SIGSEGV in avr-ld&lt;br /&gt;
| 2.23, 2.22.x&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;| avr-libc&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57114 57114] || Do not #define abs / labs&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 &amp;amp;rarr;57071]&lt;br /&gt;
|-&lt;br /&gt;
| [https://savannah.nongnu.org/bugs/?57071 57071] || Fix math.h and function names that block 64-bit double&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?49567 49567] || Use meta-info from --print-multi-lib and --print-multi-directory&lt;br /&gt;
| 2.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9416 P-9416] || [patch,AVR_TINY] Avoid constraint &amp;quot;w&amp;quot; in delay_basic.h&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9400 P-9400] || [patch] Add avrxmega3 multilibs&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?9187 P-9187] || [patch,AVR_TINY] Support 16-bit xtoa functons and more string functions.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/patch/?8729 P-8729] || [patch,avr/interrupt.h] Add ISR_NOICF, ISR_FLATTEN. Fix namespace of identifiers.&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38135 38135] || Install stdfix-avrlibc.h&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?38125 38125] || Distribute gcrt1.S&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36571 36571] || stdint.h: INTn_C not standard compliant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?36454 36454] || string.h: Error for long long in C90&lt;br /&gt;
| 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://savannah.nongnu.org/bugs/?35407 35407]&#039;&#039;&#039; || Missing multilib versions for tiny-stack targets&lt;br /&gt;
| &amp;amp;radic;&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?34695 34695] || stdint.h fixed-width int types without __attribute__((mode))&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://savannah.nongnu.org/bugs/?33698 33698] || RJMP/RCALL can cause &amp;quot;relocation truncated to fit: R_AVR_13_PCREL&amp;quot; linker error&lt;br /&gt;
|  &amp;amp;radic; ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimierung ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t2&amp;quot;&lt;br /&gt;
! PR || Optimization || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR110093 110093] || Move frenzy leading to code bloat.&lt;br /&gt;
| Regression&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109910 109910] || Prologue/epilogue saves/restores regs that are never changed.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109907 109907] || Code bloat for single bit extractions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR88209 88209] || Inefficient array initialization&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84211 84211] || Perform a post-reload register optimization pass&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR82658 82658] || Right-shifting 8-bit unsigned integers.&lt;br /&gt;
| C++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81625 81625] || v4.7 ... v8 is bloating code by &amp;gt; 25% compared to v3.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81611 81611] || gcc un-learned loop / post-increment optimization &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81540 81540] || tree-switch-conversion leads to code bloat&lt;br /&gt;
| tree-ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81533 81533] || Constructing an object that can be initialized at at load-time &lt;br /&gt;
| c++&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80929 80929] || Division with constant no more optimized to mult&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65082 65082] || Wasted cycles when using a register based varible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56439 56439] || unnecessary spill for global and local register variables&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55181 55181] || Expensive shift loop instead of bit-testing instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54378 54378] || Code bloat for long &amp;lt;&amp;lt; shifts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53049 53049]&#039;&#039;&#039; || expand/TER unappropriate moving unspec volatile&lt;br /&gt;
| middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52664 52664] || gcc.dg/tree-ssa/pr31261.c fails&lt;br /&gt;
| ssa&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52278 52278] || inefficient register allocation for SUBREGs&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49807 49807] || Missed byte (subreg) extraction when storing to volatile mem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49491 49491] || Superfluous move because of unnecessary spill for 2-operand insn&lt;br /&gt;
| RA&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39760 39760] || register allocation costs are not well described on AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38629 38629] || target-specific parameters for inline heuristics not defined for AVR &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36884 36884] || ifcvt poor optimization &lt;br /&gt;
| RTL-optimize, -fno-if-conversion&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36561 36561] || store using long array index not hoisted out of loop &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30908 30908] || tree cost for types which are &amp;gt; WORD_SIZE &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR27663 27663] || missed-optimization transforming a byte array to unsigned long&lt;br /&gt;
| patch upstream&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18065 18065] || usual arithmetic conversion not applying correctly&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR11180 11180] || Optimization decrease performance of struct assignment. &lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR3507 3507] || appalling optimisation with sub/cmp on multiple targets&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Debug-Info, Build, ... ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t3&amp;quot;&lt;br /&gt;
!PR||Debug-Info, Build, Ada, Fortran||Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/pr52641 52641] || Test cases fail for 16-bit int targets&lt;br /&gt;
| testsuite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t5&amp;quot;&lt;br /&gt;
! PR || Extensions || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112944 112944] || Support .rodata in flash for AVR64* and AVR128* devices&lt;br /&gt;
| avr&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84163 84163] || Allow address space qualifier for compound literals&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57390 57390] || Support fixed-point types in C++&lt;br /&gt;
| C++&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ungültig ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
! PR || Invalid || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61044 61044] || Computed goto with label differences does not work&lt;br /&gt;
| → Label differences not suported on AVR:&amp;lt;br/&amp;gt;[http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Labels as Values]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57501 57501] || crttn24a.o missing path with -mmcu=attiny24a&lt;br /&gt;
| → Caused by [http://savannah.nongnu.org/bugs/?35407 AVR-LibC #35407]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52474 52474] || mulhisi3: arithmetics produce completely wrong result&lt;br /&gt;
| → Caused by patch from Atmel&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38549 38549] || eicall not properly set for &amp;gt; 128K program space &lt;br /&gt;
| → [http://gcc.gnu.org/PR50820 50820]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
! PR || Won&#039;t fix || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceware.org/PR14406 14406] || Support .progmem&amp;lt;N&amp;gt;.data sections in the default ld script&lt;br /&gt;
| → [https://sourceware.org/bugzilla/show_bug.cgi?id=14406#c2 Begründung + Beispiel für ld-Skript Erweiterung]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56254 56254] || Support __builtin_avr_delay_cycles with non-const delays&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49857 49857] || Put constant switch-tables into flash&lt;br /&gt;
| (patch)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43745 43745] || Put VTABLES in Flash&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR38342 38342] || __attribute__((progmem)) not propagated from typedef to data&lt;br /&gt;
| → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t7&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR112830 112830] || ICE (__memx): in convert_memory_address_addr_space_1, at explow.cc:302&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105523 105523] || Avoid diagnostic &amp;lt;i&amp;gt;&amp;quot;array subscript 0 is outside array bounds of &#039;volatile uint8_t[0] [-Warray-bounds]&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR101188 101188] || Uses content of a clobbered register&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53372 53372] || Section attribute ignored with address space&lt;br /&gt;
| 13.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR109650 109650] || Wrong code with -Os (cc0 → CCmode fallout)&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR105753 105753] || ICE: in add_clobbers, at config/avr/avr-dimode.md:2705&lt;br /&gt;
| 13.2, 12.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR99184 99184] || Wrong rounding in double to 32-bit and 16-bit integer conversions in libgcc.&lt;br /&gt;
| 12.3, 11.4, 10.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR90706 90706] || Useless code generated for stack / register operations&lt;br /&gt;
| 12.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92729 92729] || Switch from cc0 to CCmode so avr-gcc can be kept in GCC v11+&lt;br /&gt;
| 11.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR92055 92055] || Support 64-bit double&lt;br /&gt;
| [http://gcc.gnu.org/gcc-10/changes.html#avr 10.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR86040 86040] || RAMPZ not cleared after reading from __flashN&lt;br /&gt;
| 9.3, 8.4, 7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85805 85805] || Wrong code for 64 bit comparisons on avr-gcc&lt;br /&gt;
| 8.3 combine&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR85495 85495] || lto-wrapper.exe: fatal error: file too short: No error&lt;br /&gt;
| 8.0 LTO&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83801 83801] || String constant in __flash not put into .progmem&lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83729 83729] || ICE in convert_memory_address_addr_space_1 at explow.c:300 &lt;br /&gt;
| 8.0 C&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR83738 83738] || Don&#039;t save registers in main / auto-add OS_task to main&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81754 81754] || Building of avr compiler broken&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR20296 20296]&amp;lt;br/&amp;gt;[http://gcc.gnu.org/PR81268 81268]&lt;br /&gt;
| Speeding up small ISRs&amp;lt;br/&amp;gt;Support __gcc_isr pseudo-instruction&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81075 81075] || Move jump-tables out of .text&lt;br /&gt;
| 8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81072 81072] || Add XMEGA devices with flash seen in RAM address space&lt;br /&gt;
| [http://gcc.gnu.org/gcc-8/changes.html#avr 8.0]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR84209 84209] || Don&#039;t split SP in split2&lt;br /&gt;
| 7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81910 81910] || ICE with &amp;quot;address&amp;quot; attribute on type&lt;br /&gt;
| 7.3, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81487 81487] || ld.exe: error: asprintf failed&lt;br /&gt;
| 7.2, 6.5, 5.5 mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81473 81473] || Build fails due to INT8_MIN and friends&lt;br /&gt;
| 7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81407 81407] || C++: Error if a variable in progmem needs constructing&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR81305 81305] || avrtiny uses LDS for SREG with -O0&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80492 80492] || Wrong code whith loop unrolling and local asm regs&lt;br /&gt;
| 7.2, 6.4 tree&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR79883 79883] || i18n: untranslated &amp;quot;interrupt&amp;quot; or &amp;quot;signal&amp;quot;&lt;br /&gt;
| 7.2, 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR75964 75964] || Insn-combiner removes comparison after ABS&lt;br /&gt;
| 7.2, 6.5, 5.5 rtl&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78883 78883] || ICE triggered by change to combine.c&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78562 78562] || Wrong warning for built-in functions with -flto&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR78093 78093] || New variable attribute &amp;quot;absdata&amp;quot; to enable LDS / STS on Reduced Tiny&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71948 71948] || Make [http://gcc.gnu.org/onlinedocs/gcc/AVR-Variable-Attributes.html progmem] work on reduced Tiny by adding 0x4000 to symbols&lt;br /&gt;
| [http://gcc.gnu.org/gcc-7/changes.html#avr 7.0]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71678 71678] || ICE from switch / case on long long (casesi + DImode)&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71676 71676] || casesi won&#039;t handle switch values larger than 16 bits&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60300 60300] || Minor prologue improvement w.r.t code size&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR41076 41076] || Pessimal code for logical OR of 8-bit fields&lt;br /&gt;
| 7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67353 67353] || Option-ize Warning &amp;quot;appears to be a misspelled signal / interrupt handler&amp;quot;&lt;br /&gt;
| 6.5, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR80462 80462] || Incorrect warning: uninitialized variable &#039;xxx&#039; put into program memory area&lt;br /&gt;
| 6.4, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR77326 77326] || Invalid optimization omits comparison&lt;br /&gt;
| 6.3, 5.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR72767 72767] || Some branches report too small insn length&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71976 71976] || insn-combine removes 64-bit shift&lt;br /&gt;
| 6.2, 5.5 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71151 71151] || Strings in .progmem.gcc_sw_section with -fdata-sections + const merging&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71103 71103] || ICE: unrecognizable insn: QImode subreg of symbol_ref, const or label_ref&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR71053 71053] || volatile read-and-test loop optimized to test loop (without read)&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR70677 70677] || Disable &amp;lt;tt&amp;gt;-fcaller-saves&amp;lt;/tt&amp;gt; per default&lt;br /&gt;
| 6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR30417 30417] || Wrap spec generating -Tdata into %{!Tdata:...}&lt;br /&gt;
| 6.2, 5.5, 4.9.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR67839 67839] || Bit addressable instructions generated for invalid memory address&lt;br /&gt;
| 6.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65296 65296] || fix various issues with avr specs files&lt;br /&gt;
| 5.2 → [http://savannah.nongnu.org/bugs/?44574 avr-libc #44574]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65192 65192] || ICE: attiny: In tiny_valid_direct_memory_access_range&lt;br /&gt;
| 5.0 (transient)&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52472 52472] || ICE: in convert_debug_memory_address, at cfgexpand.c (__memx, -g)&lt;br /&gt;
| 5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Älter als v5 ===&lt;br /&gt;
&lt;br /&gt;
{|  {{Tabelle}} border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;t8&amp;quot;&lt;br /&gt;
! PR || Fixed || Note&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR65196 65196] || ICE: avr_adjust_insn_length uses recog_memoized on invalid insn&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR64452 64452] || ICE: When passing struct member to varargs function&lt;br /&gt;
| 4.9.3, 4.8.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63633 63633] || ICE: unrecognizable insn with mult insns&lt;br /&gt;
| 4.9.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR63223 63223] || Make jumptables work with -Wl,--section-start,.text=&lt;br /&gt;
| 4.9.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61443 61443] || ICE: unrecognizable insn when varargs argument is indirect addr-space access&lt;br /&gt;
| 4.9.1, 4.8.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR61055 61055] || Wrong test instruction after increment (-O1 or -fno-peephole2)&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60991 60991] || Stack corruption when using __memx pointers or __int24 in large stack frame&lt;br /&gt;
| 4.9.1, 4.8.3, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56833 56833] || Postreload uses clobbered register&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50807 50807] || Constructor writing to RAM for variable in Flash&lt;br /&gt;
| 4.9.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR60486 60486] || Superfluous or missing comparision after addition or subtraction&lt;br /&gt;
| 4.8.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR59396 59396] || Wrong warning with ISR() and LTO&lt;br /&gt;
| 4.8.3, 4.8.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57844 57844] || ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57631 57631] || Use assembler name for sanity checking of ISR names&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57516 57516] || Incorrect fixed-point rounding result in the overflow case&lt;br /&gt;
| 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR57506 57506] || Some devices are present twice in avr-mcus.def&lt;br /&gt;
| 4.8.2, 4.7.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56263 56263] || Provide strict address-space checking&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR56064 56064] || Fold VIEW_CONVERT_EXPR with FIXED_CST&lt;br /&gt;
| 4.8.0 tree-ssa &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54814 54814] || ICE: Hundreds of spill fails in test suite for class R0_REG&lt;br /&gt;
| 4.8.0.&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54854 54854] || Remove &amp;lt;tt&amp;gt;-mshort-calls&amp;lt;/tt&amp;gt; option&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54815 54815] || missed optimization with operations with constant operands&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54222 54222] || ISO/IEC TR 18037 fixed-point support&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53344 53344] || Assemble 3-byte symbols&lt;br /&gt;
| 4.8.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55974 55974] || Wrong suffix for __INT24_MAX__, __UINT24_MAX__ with -mint8&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55897 55897] || Allocate __memx data to .progmemx.data&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR55243 55243] || [ada] STAMP variable is not defined in t-avr&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50293 50293] || -flto fails if GCC is installed in directory with space in path name&lt;br /&gt;
| 4.7.3&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54536 54536] || Incorrect library_name for at90usb1287&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54476 54476] || Time/memory hog with __builtin_avr_delay_cycles (-1ul) on 64-bit hosts&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR54461 54461]&#039;&#039;&#039; || Add configure option for better AVR-Libc integration&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR54220 54220] || Naked functions need frame at -O0&lt;br /&gt;
| 4.7.2, 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53595 53595]&#039;&#039;&#039; || Code size increase of +10% between two 4.7.1 snapshots&lt;br /&gt;
| 4.7.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53448 53448] || __attribute__((aligned(2))) ignored&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53256 53256]&#039;&#039;&#039; || Attribute &#039;interrupt&#039; shall override attribute &#039;signal&#039;&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR53065 53065] || ICE: in replace_reg_with_saved_mem, at caller-save.c:1125&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR53033 53033]&#039;&#039;&#039; || Wrong register number for 3-byte loads via X&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52737 52737]&#039;&#039;&#039; || -mtiny-stack shall not influence multilib selection&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52692 52692] || Add support for avr-specific built-ins + LTO&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52545 52545] || SECTION_EXCLUDE flag clobbers SECTION_MACH_DEP&lt;br /&gt;
| 4.7.1 other&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR52543 52543]&#039;&#039;&#039; || lower-subreg.c: code bloat of 300%-400% for multi-word memory splits&lt;br /&gt;
| &#039;&#039;&#039;HACK&#039;&#039;&#039; 4.7.1 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52508 52508] || HAVE_RAMPZ as condition to set RAMPZ prior to flash-read is no more appropriate&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52507 52507] || movmem loop for __memx address space uses wrong loop label&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52506 52506] || XMEGA: Wrong order of save/restore of RAMPX/Y/Z/D SFRs in ISR pro-/epilogue&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52505 52505] || __memx address space reading unintentionally from RAM&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52496 52496] || avr-specific built-ins missing memory barrier&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52488 52488] || ICE: unreconizable addqi -2000 insn&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52484 52484] || Missing __memx insn because of wrong register footprint&lt;br /&gt;
| 4.7.1 &lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52461 52461] || XMEGA+EBI: RAMPZ clobbered&lt;br /&gt;
| 4.7.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51527 51527]&#039;&#039;&#039; || ICE: &#039;convert_to_integer&#039; enters infinite recursion for __int24&lt;br /&gt;
| 4.7.1 c&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR46261 46261] || ICE: when compiled with -mint8 &lt;br /&gt;
| 4.7.1, 4.6.4, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52261 52261] || Add XMEGA support&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52148 52148] ||ICE: spill_failure for movmemhi&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51782 51782]&#039;&#039;&#039; || Missing address-space information leads to wrong code&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51425 51425] || no SBIS/SBIC instructions&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51409 51409]&#039;&#039;&#039; || Building avr-gcc fails if configured for other languages than from C family&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51345 51345] || Devices with 8-bit SP need their own multilib(s)&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51050 51050] || ICE: invalid rtl sharing found in the insn (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51002 51002] || SP_H register is used even on targets that do not have it (ATtiny26)&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50931 50931] || Support a 24-bit scalar integer mode&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50910 50910] || Inefficient division by 2&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50887 50887] || Support ACCUMULATE_OUTGOING_ARGS &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50775 50775]&#039;&#039;&#039; || Register allocator sets up frame and frame pointer with low register pressure&lt;br /&gt;
| 4.7.0, ra&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50616 50616] || ICE: lto1.exe: invalid resolution in the resolution file&lt;br /&gt;
| 4.7.0, lto, mingw32&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50566 50566] || Add support for better logging by means of -mlog=&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50465 50465] || Use insn attribute to depict if and how instruction lengths have to be adjusted&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50449 50449] || Loading some 32-bit constants not optimal&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50448 50448] || Missed optimization accessing struct component with integer address&lt;br /&gt;
| 4.7.0 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50447 50447] || Better support of AND, OR, XOR and PLUS with constant integers&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50446 50446] || Implement rotate patterns with offset 1&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50358 50358] || Implement [u]maddqihi4 [u]msubqihi4 patterns&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50063 50063]&#039;&#039;&#039; || wrong code for gcc.dg/torture/pta-ptrarith-3.c&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49939 49939] || Skip 2-word instructions if applicable&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49903 49903] || Redundant comparisons in binary-seach switch/case expansion&lt;br /&gt;
| 4.7.0 FIXME&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49881 49881] || Inefficient stack manipulation around calls&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR49868 49868]&#039;&#039;&#039; || Implement named address space to place/access data in flash memory&lt;br /&gt;
| 4.7.0 ← [http://sourceware.org/PR13503 binutils PR13503]&lt;br /&gt;
|- &lt;br /&gt;
| [http://gcc.gnu.org/PR49864 49864] || ICE: in maybe_record_trace_start, at dwarf2cfi.c:2439&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49687 49687] || Missed optimization for widening MUL&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49313 49313] || Inefficient libgcc implementations for avr&lt;br /&gt;
| 4.7.0 ABI&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR47597 47597] || ICE: call frame debugging information is not handled when case is post_dec &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46278 46278]&#039;&#039;&#039; || avr-gcc 4.5.1 doing suboptimal reloads using X &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45099 45099] || Warning could be issued for use of register variables that will fail.&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR43746 43746] || -fmerge-constants and -fmerge-all-constants don&#039;t work at AVR target &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR42210 42210] || optimizing assignment to a bit field&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39621 39621] || Delaying operation to end of function causes high stack usage&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR36467 36467] || Missed optimization with pointer arithmetic and mul* &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR35860 35860] || [4.3/4.4/4.5/4.6 Regression] [avr] code bloat caused by -fsplit-wide-types &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34888 34888] || Stack patterns not optimal &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34792 34792] || c++ worse than c compiler at 8-bit optimisations &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34791 34791] || optimisation of 8-bit logic sometimes fails &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34790 34790] || no sibling call optimisation&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34789 34789] || sometimes the compiler keeps addresses in registers unnecessarily &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR33049 33049] || bit extraction non optimal, inversing logic solves problem&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29560 29560] || Poor optimization for byte shifts &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR29524 29524] || [4.3/4.4/4.5/4.6 Regression] Too much RAM used: __clz_tab[] linked&lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR18145 18145] || Do not emit __do_copy_data or __do_clear_bss if .data or .bss is empty. &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR17994 17994] || avr-gcc does not output a dwarf2 .debug_frame section &lt;br /&gt;
| 4.7.0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR52741 52741] || -mtiny-stack must not make assumptions on upper 8 bits of SP/FP&lt;br /&gt;
| 4.6.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR51756 51756] || Wrong warning: uninitialized variable put into program memory area&lt;br /&gt;
| 4.6.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR51374 51374]&#039;&#039;&#039; || insn combine reorders volatile memory accesses&lt;br /&gt;
| 4.6.3 middle-end&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50820 50820]&#039;&#039;&#039; || Use EIND consistently&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50816 50816] || Discriminators are emitted in DWARF 2 format &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR50652 50652]&#039;&#039;&#039; || Incorrect data start value for ATmega164A&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR50289 50289] || call-prologues saving/restoring global register variables&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49824 49824] || Missing documentation for OS_task and OS_main attributes &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49764 49764] || [avr-g++] Rejects attribute progmem&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR49487 49487] || ICE: bytewise rotate&lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR46779 46779]&#039;&#039;&#039; || wrong code generation for values held in R28/R29 &lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR34734 34734] || attribute((progmem)) not handled properly in C++ for AVRs&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?33716 avr-libc #33716]&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR44643 44643] || ICE: in c-typeck.c&lt;br /&gt;
| 4.6.2 → [http://savannah.nongnu.org/bugs/?32988 avr-libc #32988]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR39633 39633]&#039;&#039;&#039; || missing 8-bit comparison (*cmpqi)&lt;br /&gt;
| 4.6.2, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR39386 39386] || different computation results for O1 and O0 executables &lt;br /&gt;
| 4.6.2&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR48459 48459] || [4.6/4.7 Regression] avr: Assertion failure with -gdwarf-2&lt;br /&gt;
| 4.6.1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR45263 45263]&#039;&#039;&#039; || registers used in __do_global_ctors can get clobbered &lt;br /&gt;
| 4.6.1, 4.5.4&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/PR45261 45261] || Doesn&#039;t indicate failure status when it doesn&#039;t support (attiny2313A) &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR42240 42240]&#039;&#039;&#039; || [4.3/4.4 Regression] wrong epilogue on naked function &lt;br /&gt;
| 4.5.3&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[http://gcc.gnu.org/PR41885 41885]&#039;&#039;&#039; || Rotate patterns do not correctly consider overlap. &lt;br /&gt;
| 4.5.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;cf_gcctarget=avr&amp;amp;cf_gcctarget_type=allwordssubstr&amp;amp;cf_known_to_fail_type=allwords&amp;amp;cf_known_to_work_type=allwords&amp;amp;product=gcc&amp;amp;query_format=advanced&amp;amp;order=changeddate%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= gcc.gnu.org/bugzilla: avr]&lt;br /&gt;
* [http://savannah.nongnu.org/bugs/?group=avr-libc avr-libc: Fehler]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: avr-gcc]]&lt;/div&gt;</summary>
		<author><name>Gjlayde</name></author>
	</entry>
</feed>