public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/65507] New: avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312
@ 2015-03-21 23:38 dfnsonfsduifb at gmx dot de
  2015-03-22  2:22 ` [Bug c/65507] " dfnsonfsduifb at gmx dot de
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: dfnsonfsduifb at gmx dot de @ 2015-03-21 23:38 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65507

            Bug ID: 65507
           Summary: avr-gcc -f-merge-all-constants causes internal
                    compiler error in get_section, at varasm.c:312
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dfnsonfsduifb at gmx dot de

Compiler:
Using built-in specs.
COLLECT_GCC=/home/joe/bin/gcc/avr/bin/avr-gcc
COLLECT_LTO_WRAPPER=/home/joe/bin/gcc/avr/libexec/gcc/avr/4.8.1/lto-wrapper
Target: avr
Configured with: ../configure --prefix=/home/joe/bin/gcc/avr/ --with-gnu-ld
--with-gnu-as --with-dwarf2 --disable-werror --disable-threads --disable-nls
--disable-shared --disable-libssp --disable-libmudflap --disable-libgomp
--target=avr --enable-languages=c --with-system-zlib --enable-target-optspace
Thread model: single
gcc version 4.8.1 (GCC) 

Running on Linux, x86_64. avr-libc v1.8.0.

Complete test program that demonstrates the problem:
#include <stdio.h>
#include <avr/pgmspace.h>

volatile int running;

void foobar() {
    char lcdText[33];
    const char *pgmstr = running ? PSTR("Run!") : PSTR("STOP");
    snprintf(lcdText, 32, "%4S", pgmstr);
}

Description of problem:
When this is compiled with -fmerge-all-constants, a internal compiler error is
triggered. The example compiles successfully without -fmerge-all-constants.

$ avr-gcc -mmcu=atmega128 -fmerge-all-constants -c -o crap crap.c
crap.c:10:1: internal compiler error: in get_section, at varasm.c:312
 }
 ^
0x90611f get_section(char const*, unsigned int, tree_node*)
    ../../gcc/varasm.c:312
0x91da3f avr_asm_select_section
    ../../gcc/config/avr/avr.c:8368
0x90e83a assemble_variable(tree_node*, int, int, int)
    ../../gcc/varasm.c:2013
0x910205 varpool_assemble_decl(varpool_node*)
    ../../gcc/varpool.c:313
0x578478 output_in_order
    ../../gcc/cgraphunit.c:1837
0x578478 compile()
    ../../gcc/cgraphunit.c:2037
0x578689 finalize_compilation_unit()
    ../../gcc/cgraphunit.c:2119
0x4b5383 c_write_global_declarations()
    ../../gcc/c/c-decl.c:10118
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c/65507] avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312
  2015-03-21 23:38 [Bug c/65507] New: avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312 dfnsonfsduifb at gmx dot de
@ 2015-03-22  2:22 ` dfnsonfsduifb at gmx dot de
  2015-03-22  9:56 ` [Bug target/65507] " maltsevm at gmail dot com
  2015-03-30  2:24 ` [Bug target/65507] avr-gcc -fmerge-all-constants " gjl at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: dfnsonfsduifb at gmx dot de @ 2015-03-22  2:22 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65507

--- Comment #1 from Johannes Bauer <dfnsonfsduifb at gmx dot de> ---
Created attachment 35089
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35089&action=edit
Preprocessed file (-save-temps)


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/65507] avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312
  2015-03-21 23:38 [Bug c/65507] New: avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312 dfnsonfsduifb at gmx dot de
  2015-03-22  2:22 ` [Bug c/65507] " dfnsonfsduifb at gmx dot de
@ 2015-03-22  9:56 ` maltsevm at gmail dot com
  2015-03-30  2:24 ` [Bug target/65507] avr-gcc -fmerge-all-constants " gjl at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: maltsevm at gmail dot com @ 2015-03-22  9:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65507

Mikhail Maltsev <maltsevm at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |maltsevm at gmail dot com

--- Comment #2 from Mikhail Maltsev <maltsevm at gmail dot com> ---
On current trunk GCC does not ICE, but still sort-of-rejects the valid code.
Reduced testcase:

$ cat ./reduced2.c 
void foobar() {
    static const char c1[] __attribute__((__progmem__)) = "1",
                      c2[] __attribute__((__progmem__)) = "2",
                      c3[] = "3";
}

/opt/binutils-avr/bin/avr-gcc -c -fmerge-all-constants ./reduced2.c 
./reduced2.c:5:1: error: section type conflict
 }

Despite the error, assembly code (and object file) are still produced, though
it seems to me, that section information gets trashed, but I'm not sure. Looks
like this:
        .section        .rodata.str1.1,"aMS",@progbits,1
        .type   c3.1570, @object
        .size   c3.1570, 2
c3.1570:
        .string "3"
        .section        .progmem.data.str1.1
        .type   c2.1569, @object
        .size   c2.1569, 2
c2.1569:
        .string "2"
        .type   c1.1568, @object
        .size   c1.1568, 2
c1.1568:
        .string "1"

Without "-fmerge-all-constants" I get the following:

        .size   foobar, .-foobar
        .section        .rodata
        .type   c3.1570, @object
        .size   c3.1570, 2
c3.1570:
        .string "3"
        .section        .progmem.data,"a",@progbits
        .type   c2.1569, @object
        .size   c2.1569, 2
c2.1569:
        .string "2"
        .type   c1.1568, @object
        .size   c1.1568, 2
c1.1568:
        .string "1"

The problem occurs when GCC tries to get the section for c1 and calls
avr_asm_select_section. This function changes the section name from
".rodata.data.str1.1" to ".progmem.data.str1.1", it then turns out that this
section already exists and the check in varasm.c:get_section fails (both
sections have same flags, SECTION_DECLARED is true, SECTION_OVERRIDE is false,
SECTION_WRITE is false - this all triggers an error).

This comment seems relevant:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43746#c8.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/65507] avr-gcc -fmerge-all-constants causes internal compiler error in get_section, at varasm.c:312
  2015-03-21 23:38 [Bug c/65507] New: avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312 dfnsonfsduifb at gmx dot de
  2015-03-22  2:22 ` [Bug c/65507] " dfnsonfsduifb at gmx dot de
  2015-03-22  9:56 ` [Bug target/65507] " maltsevm at gmail dot com
@ 2015-03-30  2:24 ` gjl at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: gjl at gcc dot gnu.org @ 2015-03-30  2:24 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65507

Georg-Johann Lay <gjl at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |gjl at gcc dot gnu.org
         Resolution|---                         |DUPLICATE

--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Duplicate.

*** This bug has been marked as a duplicate of bug 57597 ***


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-03-29 22:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-21 23:38 [Bug c/65507] New: avr-gcc -f-merge-all-constants causes internal compiler error in get_section, at varasm.c:312 dfnsonfsduifb at gmx dot de
2015-03-22  2:22 ` [Bug c/65507] " dfnsonfsduifb at gmx dot de
2015-03-22  9:56 ` [Bug target/65507] " maltsevm at gmail dot com
2015-03-30  2:24 ` [Bug target/65507] avr-gcc -fmerge-all-constants " gjl at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).