public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/100595] New: ICE: output_operand: invalid expression as operand
@ 2021-05-14  5:59 cnsun at uwaterloo dot ca
  2021-05-14  7:21 ` [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label marxin at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: cnsun at uwaterloo dot ca @ 2021-05-14  5:59 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 100595
           Summary: ICE: output_operand: invalid expression as operand
           Product: gcc
           Version: tree-ssa
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cnsun at uwaterloo dot ca
  Target Milestone: ---

$ gcc-trunk -v
Using built-in specs.
COLLECT_GCC=gcc-trunk
COLLECT_LTO_WRAPPER=/scratch/software/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/configure
--enable-languages=c,c++,lto --enable-checking-yes --enable-multiarch
--prefix=/scratch/software/gcc-trunk --disable-bootstrap
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.0.0 20210514 (experimental) [master revision
:e5c3c8afa:f3b1516d9dfd969d7cc1ca6f26dec13478a1c458] (GCC)

$ cat mutant.c
typedef __UINTPTR_TYPE__ uintptr_t;
test2() {
  static uintptr_t a = &&l1 + ((char *)&&l1 - (char *)&&l2);
l1:
l2:
  return a;
}

$ gcc-trunk  mutant.c
mutant.c:2:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
    2 | test2() {
      | ^~~~~
mutant.c: In function ‘test2’:
mutant.c:3:24: warning: initialization of ‘uintptr_t’ {aka ‘long unsigned int’}
from ‘void *’ makes integer from pointer without a cast [-Wint-conversion]
    3 |   static uintptr_t a = &&l1 + ((char *)&&l1 - (char *)&&l2);
      |                        ^~
mutant.c: At top level:
mutant.c:7:1: internal compiler error: output_operand: invalid expression as
operand
    7 | }
      | ^
0xb7f867 output_operand_lossage(char const*, ...)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/final.c:3238
0xb80341 output_addr_const(_IO_FILE*, rtx_def*)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/final.c:3835
0xb80123 output_addr_const(_IO_FILE*, rtx_def*)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/final.c:3810
0x1240c82 assemble_integer_with_op(char const*, rtx_def*)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:2866
0x1240ce1 default_assemble_integer(rtx_def*, unsigned int, int)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:2882
0x1240d60 assemble_integer(rtx_def*, unsigned int, unsigned int, int)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:2898
0x1247cc8 output_constant
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:5267
0x1249f74 output_constant
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:5172
0x1249f74 assemble_variable_contents
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:2235
0x1253cfc assemble_variable(tree_node*, int, int, int)
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varasm.c:2414
0x1256dc9 varpool_node::assemble_decl()
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/varpool.c:595
0xa80549 output_in_order
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/cgraphunit.c:2135
0xa80549 symbol_table::compile()
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/cgraphunit.c:2353
0xa8365b symbol_table::compile()
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/cgraphunit.c:2269
0xa8365b symbol_table::finalize_compilation_unit()
        /tmp/tmp.eZIsobWkq2-gcc-builder/gcc/gcc/cgraphunit.c:2537
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

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

* [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label
  2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
@ 2021-05-14  7:21 ` marxin at gcc dot gnu.org
  2021-05-17 12:16 ` rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: marxin at gcc dot gnu.org @ 2021-05-14  7:21 UTC (permalink / raw)
  To: gcc-bugs

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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-05-14
             Status|UNCONFIRMED                 |NEW
                 CC|                            |jsm28 at gcc dot gnu.org,
                   |                            |marxin at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Is it really a valid C code?

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

* [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label
  2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
  2021-05-14  7:21 ` [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label marxin at gcc dot gnu.org
@ 2021-05-17 12:16 ` rguenth at gcc dot gnu.org
  2021-05-17 20:54 ` joseph at codesourcery dot com
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-05-17 12:16 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's using a GNU extension, but we likely shouldn't accept it as a valid
constant initializer.

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

* [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label
  2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
  2021-05-14  7:21 ` [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label marxin at gcc dot gnu.org
  2021-05-17 12:16 ` rguenth at gcc dot gnu.org
@ 2021-05-17 20:54 ` joseph at codesourcery dot com
  2024-04-07  5:29 ` pinskia at gcc dot gnu.org
  2024-04-07  5:32 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: joseph at codesourcery dot com @ 2021-05-17 20:54 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> ---
My old model of constant expressions for GNU extensions says that the 
difference of two label addresses is a "label difference constant 
expression", which is valid as a static initializer by itself but not when 
added to anything.

https://www.polyomino.org.uk/computer/c/const-exprs-gnu.txt

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

* [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label
  2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
                   ` (2 preceding siblings ...)
  2021-05-17 20:54 ` joseph at codesourcery dot com
@ 2024-04-07  5:29 ` pinskia at gcc dot gnu.org
  2024-04-07  5:32 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-04-07  5:29 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Updated testcase:
```
typedef __UINTPTR_TYPE__ uintptr_t;
int test2() {
  static uintptr_t a = (uintptr_t)(&&l1 + ((char *)&&l1 - (char *)&&l2));
l1:
l2:
  return (int)a;
}
```

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

* [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label
  2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
                   ` (3 preceding siblings ...)
  2024-04-07  5:29 ` pinskia at gcc dot gnu.org
@ 2024-04-07  5:32 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-04-07  5:32 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |141242068 at smail dot nju.edu.cn

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 112499 has been marked as a duplicate of this bug. ***

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

end of thread, other threads:[~2024-04-07  5:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-14  5:59 [Bug c/100595] New: ICE: output_operand: invalid expression as operand cnsun at uwaterloo dot ca
2021-05-14  7:21 ` [Bug middle-end/100595] ICE: output_operand with static const int of address of label + difference of label marxin at gcc dot gnu.org
2021-05-17 12:16 ` rguenth at gcc dot gnu.org
2021-05-17 20:54 ` joseph at codesourcery dot com
2024-04-07  5:29 ` pinskia at gcc dot gnu.org
2024-04-07  5:32 ` pinskia 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).