https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85704
Bug ID: 85704 Summary: cc1 run out of memory memory when it compile Product: gcc Version: 8.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: haruue at caoyue dot com.cn Target Milestone: --- Created attachment 44089 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44089&action=edit The output of strace I run out of memory when I try to build linux-usermode 4.16.7 with gcc 8.1.0. * The operation to reproduce the problem: wget http://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.tar.xz wget https://cdn.kernel.org/pub/linux/kernel/v4.x/patch-4.16.7.xz tar -Jxf linux-4.16.tar.xz xz -d patch-4.16.7.xz cd linux-4.16/ patch -p1 -i ../patch-4.16.7 make ARCH=um defconfig ulimit -m 1500000 -v 1500000 make ARCH=um Then, when it compiles the arch/um/drivers/ubd_kern.c, GCC got into stuck and exhausts 1.5GB memory in little time. * Source code of arch/um/drivers/ubd_kern.c in linux kernel tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/um/drivers/ubd_kern.c * The actual command invoked is following: gcc -Wp,-MD,arch/um/drivers/.ubd_kern.o.d \ -nostdinc \ -isystem \ /usr/lib/gcc/x86_64-pc-linux-gnu/8.1.0/include \ -I./arch/um/include \ -I./arch/um/include/generated \ -I./include \ -I./arch/um/include/uapi \ -I./arch/um/include/generated/uapi \ -I./include/uapi \ -I./include/generated/uapi \ -include \ ./include/linux/kconfig.h \ -D__KERNEL__ \ -m64 \ -I./arch/x86/um \ -I./arch/x86/include \ -I./arch/x86/include/uapi \ -I./arch/x86/include/generated \ -I./arch/x86/include/generated/uapi \ -Wall \ -Wundef \ -Wstrict-prototypes \ -Wno-trigraphs \ -fno-strict-aliasing \ -fno-common \ -fshort-wchar \ -Werror-implicit-function-declaration \ -Wno-format-security \ -std=gnu89 \ -fno-PIE \ -mcmodel=large \ -fno-builtin \ -m64 \ -funit-at-a-time \ -D__arch_um__ \ -I./arch/um/include/shared \ -I./arch/x86/um/shared \ -I./arch/um/include/shared/skas \ -Dvmap=kernel_vmap \ -Dlongjmp=kernel_longjmp \ -Dsetjmp=kernel_setjmp \ -Din6addr_loopback=kernel_in6addr_loopback \ -Din6addr_any=kernel_in6addr_any \ -Dstrrchr=kernel_strrchr \ -D_LARGEFILE64_SOURCE \ -Derrno=kernel_errno \ -Dsigprocmask=kernel_sigprocmask \ -Dmktime=kernel_mktime \ -fno-delete-null-pointer-checks \ -Wno-frame-address \ -Wno-format-truncation \ -Wno-format-overflow \ -Wno-int-in-bool-context \ -Os \ -Wno-maybe-uninitialized \ --param=allow-store-data-races=0 \ -DCC_HAVE_ASM_GOTO \ -Wframe-larger-than=1024 \ -fno-stack-protector \ -Wno-unused-but-set-variable \ -Wno-unused-const-variable \ -fno-omit-frame-pointer \ -fno-optimize-sibling-calls \ -fno-var-tracking-assignments \ -g \ -Wdeclaration-after-statement \ -Wno-pointer-sign \ -fno-strict-overflow \ -fno-merge-all-constants \ -fmerge-constants \ -fno-stack-check \ -fconserve-stack \ -Werror=implicit-int \ -Werror=strict-prototypes \ -Werror=date-time \ -Werror=incompatible-pointer-types \ -Werror=designated-init \ -Wno-packed-not-aligned \ -DKBUILD_BASENAME='"ubd_kern"' \ -DKBUILD_MODNAME='"ubd"' \ -c -o \ arch/um/drivers/ubd_kern.o \ arch/um/drivers/ubd_kern.c; I feel sorry because I know little about gcc implementation. I attached the strace output of above gcc command. It seem that gcc just mmap more and more memory before memory run out. And everything is OK in GCC 7.3.1. Is this a bug of gcc or just some problem in the kernel code?