https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82225
Bug ID: 82225 Summary: Unexpected nondeterministic "internal compiler error: Segmentation fault" when gcc is expected to save either rsp or rbp to allow its use in inline asm Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: inline-asm Assignee: unassigned at gcc dot gnu.org Reporter: jasongross9+bugzilla at gmail dot com Target Milestone: --- Created attachment 42185 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42185&action=edit .tgz containing the c code This bug only shows up on some runs of gcc (maybe 70% of them). It does not show up when I compile the .i files emitted by -save-temps, so far as I can tell. gcc is installed from the ubuntu package gcc-7 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.2.0-1ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 7.2.0 (Ubuntu 7.2.0-1ubuntu1~16.04) $ uname -a Linux jgross-Leopard-WS 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename: xenial $ gcc -o measure -I liblow measure.c scalarmult_noladderstep.c femul_scheduled.c -D UUT=crypto_scalarmult_bench scalarmult_noladderstep.c:97:1: warning: always_inline function might not be inlinable [-Wattributes] fmul(felem output, const felem in2, const felem in) { ^~~~ In file included from scalarmult_noladderstep.c:32:0: femul.h:6:19: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13); ^~~~~ scalarmult_noladderstep.c: In function ‘fmul’: femul.h:6:19: error: inlining failed in call to always_inline ‘femul’: function body not available scalarmult_noladderstep.c:99:3: note: called from here femul(out, ^~~~~~~~~~ in2[4], in2[3], in2[2], in2[1], in2[0], ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ in[4], in[3], in[2], in[1], in[0]); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ femul_scheduled.c:19:19: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13) { ^~~~~ femul_scheduled.c: In function ‘femul’: femul_scheduled.c:221:1: internal compiler error: Segmentation fault } ^ 0x9e0c5f crash_signal ../../src/gcc/toplev.c:337 0x8b6cd0 lra_eliminate_reg_if_possible(rtx_def**) ../../src/gcc/lra-eliminations.c:1385 0x8a66c6 address_eliminator ../../src/gcc/lra-constraints.c:362 0x8a67d5 satisfies_address_constraint_p ../../src/gcc/lra-constraints.c:411 0x8ae3c9 satisfies_address_constraint_p ../../src/gcc/lra-constraints.c:423 0x8ae3c9 process_alt_operands ../../src/gcc/lra-constraints.c:2274 0x8ae3c9 curr_insn_transform ../../src/gcc/lra-constraints.c:3848 0x8b098e lra_constraints(bool) ../../src/gcc/lra-constraints.c:4847 0x89fe84 lra(_IO_FILE*) ../../src/gcc/lra.c:2392 0x85e0e1 do_reload ../../src/gcc/ira.c:5472 0x85e0e1 execute ../../src/gcc/ira.c:5656 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions. With -v -save-temps: $ gcc -v -save-temps -o measure -I liblow measure.c scalarmult_noladderstep.c femul_scheduled.c -D UUT=crypto_scalarmult_bench Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.2.0-1ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 7.2.0 (Ubuntu 7.2.0-1ubuntu1~16.04) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench measure.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o measure.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed measure.i -quiet -dumpbase measure.c -mtune=generic -march=x86-64 -auxbase measure -version -fstack-protector-strong -Wformat -Wformat-security -o measure.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' as -v -I liblow --64 -o measure.o measure.s GNU assembler version 2.26.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.26.1 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench scalarmult_noladderstep.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o scalarmult_noladderstep.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed scalarmult_noladderstep.i -quiet -dumpbase scalarmult_noladderstep.c -mtune=generic -march=x86-64 -auxbase scalarmult_noladderstep -version -fstack-protector-strong -Wformat -Wformat-security -o scalarmult_noladderstep.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c scalarmult_noladderstep.c:97:1: warning: always_inline function might not be inlinable [-Wattributes] fmul(felem output, const felem in2, const felem in) { ^~~~ In file included from scalarmult_noladderstep.c:32:0: femul.h:6:37: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13); ^~~~~ scalarmult_noladderstep.c: In function ‘fmul’: femul.h:6:37: error: inlining failed in call to always_inline ‘femul’: function body not available scalarmult_noladderstep.c:99:3: note: called from here femul(out, ^~~~~~~~~~ in2[4], in2[3], in2[2], in2[1], in2[0], ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ in[4], in[3], in[2], in[1], in[0]); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench femul_scheduled.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o femul_scheduled.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed femul_scheduled.i -quiet -dumpbase femul_scheduled.c -mtune=generic -march=x86-64 -auxbase femul_scheduled -version -fstack-protector-strong -Wformat -Wformat-security -o femul_scheduled.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c femul_scheduled.c:19:37: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13) { ^~~~~ femul_scheduled.c: In function ‘femul’: femul_scheduled.c:221:1: internal compiler error: Segmentation fault } ^ 0x9e0c5f crash_signal ../../src/gcc/toplev.c:337 0x8b6cd0 lra_eliminate_reg_if_possible(rtx_def**) ../../src/gcc/lra-eliminations.c:1385 0x8a66c6 address_eliminator ../../src/gcc/lra-constraints.c:362 0x8a67d5 satisfies_address_constraint_p ../../src/gcc/lra-constraints.c:411 0x8ae3c9 satisfies_address_constraint_p ../../src/gcc/lra-constraints.c:423 0x8ae3c9 process_alt_operands ../../src/gcc/lra-constraints.c:2274 0x8ae3c9 curr_insn_transform ../../src/gcc/lra-constraints.c:3848 0x8b098e lra_constraints(bool) ../../src/gcc/lra-constraints.c:4847 0x89fe84 lra(_IO_FILE*) ../../src/gcc/lra.c:2392 0x85e0e1 do_reload ../../src/gcc/ira.c:5472 0x85e0e1 execute ../../src/gcc/ira.c:5656 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions. Other times, it works fine: $ gcc -v -save-temps -o measure -I liblow measure.c scalarmult_noladderstep.c femul_scheduled.c -D UUT=crypto_scalarmult_bench Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.2.0-1ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 7.2.0 (Ubuntu 7.2.0-1ubuntu1~16.04) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench measure.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o measure.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed measure.i -quiet -dumpbase measure.c -mtune=generic -march=x86-64 -auxbase measure -version -fstack-protector-strong -Wformat -Wformat-security -o measure.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' as -v -I liblow --64 -o measure.o measure.s GNU assembler version 2.26.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.26.1 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench scalarmult_noladderstep.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o scalarmult_noladderstep.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed scalarmult_noladderstep.i -quiet -dumpbase scalarmult_noladderstep.c -mtune=generic -march=x86-64 -auxbase scalarmult_noladderstep -version -fstack-protector-strong -Wformat -Wformat-security -o scalarmult_noladderstep.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c scalarmult_noladderstep.c:97:1: warning: always_inline function might not be inlinable [-Wattributes] fmul(felem output, const felem in2, const felem in) { ^~~~ In file included from scalarmult_noladderstep.c:32:0: femul.h:6:37: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13); ^~~~~ scalarmult_noladderstep.c: In function ‘fmul’: femul.h:6:37: error: inlining failed in call to always_inline ‘femul’: function body not available scalarmult_noladderstep.c:99:3: note: called from here femul(out, ^~~~~~~~~~ in2[4], in2[3], in2[2], in2[1], in2[0], ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ in[4], in[3], in[2], in[1], in[0]); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -E -quiet -v -I liblow -imultiarch x86_64-linux-gnu -D UUT=crypto_scalarmult_bench femul_scheduled.c -mtune=generic -march=x86-64 -fpch-preprocess -fstack-protector-strong -Wformat -Wformat-security -o femul_scheduled.i ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: liblow /usr/lib/gcc/x86_64-linux-gnu/7/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'measure' '-I' 'liblow' '-D' 'UUT=crypto_scalarmult_bench' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/7/cc1 -fpreprocessed femul_scheduled.i -quiet -dumpbase femul_scheduled.c -mtune=generic -march=x86-64 -auxbase femul_scheduled -version -fstack-protector-strong -Wformat -Wformat-security -o femul_scheduled.s GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C11 (Ubuntu 7.2.0-1ubuntu1~16.04) version 7.2.0 (x86_64-linux-gnu) compiled by GNU C version 7.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 55ea8e2f6e6b46a828851b4b8f05801c femul_scheduled.c:19:37: warning: always_inline function might not be inlinable [-Wattributes] void force_inline femul(uint64_t* out, uint64_t x10, uint64_t x11, uint64_t x9, uint64_t x7, uint64_t x5, uint64_t x18, uint64_t x19, uint64_t x17, uint64_t x15, uint64_t x13) { ^~~~~ femul_scheduled.c: In function ‘femul’: femul_scheduled.c:24:1: error: ‘asm’ operand has impossible constraints asm ( ^~~ What I expect: I expect gcc to successfully generate code for my inline assembly that saves either rbp or rsp (whichever one it's not using for stack memory addresses), and then restores it at the end, allowing compilation of assembly code with 15 registers and memory.