https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78844
Bug ID: 78844 Summary: target_clones causes compiler memory corruption Product: gcc Version: 6.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: steven at uplinklabs dot net Target Milestone: --- Using modified version of test case from PR78808: --- __attribute__((target_clones("avx2,fma,bmi,bmi2", "arch=sandybridge", "default"))) static void _saxpy(int n, float a, float * restrict x, float * restrict y) { #pragma omp parallel for for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } void saxpy(int n, float a, float * restrict x, float * restrict y) { return _saxpy(n, a, x, y); } --- Only difference is the first argument for target_clones. Original intent was to list the necessary features provided in arch=haswell without requiring an exact architecture match (i.e. arch=haswell code path doesn't selected on a Skylake host, so my theory was that feature checks would work better). Attempting to compile the above results in memory corruption in cc1: $ gcc -O3 -std=gnu11 -ffast-math -S test.c *** Error in `/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1': malloc(): memory corruption (fast): 0x0000000002e5f690 *** ======= Backtrace: ========= /usr/lib/libc.so.6(+0x70cdb)[0x7f8442a3fcdb] /usr/lib/libc.so.6(+0x770b6)[0x7f8442a460b6] /usr/lib/libc.so.6(+0x794e1)[0x7f8442a484e1] /usr/lib/libc.so.6(__libc_malloc+0x54)[0x7f8442a49eb4] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(xmalloc+0x18)[0x10bd1f8] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1[0xff477a] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_ZN12symbol_table29call_cgraph_duplication_hooksEP11cgraph_nodeS1_+0x2c)[0x6e93bc] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_ZN11cgraph_node20create_version_cloneEP9tree_node3vecIP11cgraph_edge7va_heap6vl_ptrEP11bitmap_head+0x232)[0x6f9082] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_ZN11cgraph_node30create_version_clone_with_bodyE3vecIP11cgraph_edge7va_heap6vl_ptrEPS0_IP15ipa_replace_map5va_gc8vl_embedEP11bitmap_headbSD_P15basic_block_defPKc+0xb1)[0x6f9161] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1[0x101a7a0] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1[0x101a865] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_Z16execute_one_passP8opt_pass+0x163)[0x954113] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_Z21execute_ipa_pass_listP8opt_pass+0x92)[0x954d72] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1[0x6f57aa] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_ZN12symbol_table25finalize_compilation_unitEv+0xd3)[0x6f7533] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1[0xa02c85] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_ZN6toplev4mainEiPPc+0x6d4)[0x5de7d4] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(main+0x27)[0x5e09a7] /usr/lib/libc.so.6(__libc_start_main+0xf1)[0x7f84429ef321] /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1(_start+0x2a)[0x5e0daa] ======= Memory map: ======== 00400000-01a7b000 r-xp 00000000 fe:00 25167806 /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1 01c7b000-01c81000 r--p 0167b000 fe:00 25167806 /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1 01c81000-01c8e000 rw-p 01681000 fe:00 25167806 /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/cc1 01c8e000-01dd8000 rw-p 00000000 00:00 0 02d47000-02ec1000 rw-p 00000000 00:00 0 [heap] 7f843c000000-7f843c021000 rw-p 00000000 00:00 0 7f843c021000-7f8440000000 ---p 00000000 00:00 0 7f84423d6000-7f84423ec000 r-xp 00000000 fe:00 25171169 /usr/lib/libgcc_s.so.1 7f84423ec000-7f84425eb000 ---p 00016000 fe:00 25171169 /usr/lib/libgcc_s.so.1 7f84425eb000-7f84425ec000 r--p 00015000 fe:00 25171169 /usr/lib/libgcc_s.so.1 7f84425ec000-7f84425ed000 rw-p 00016000 fe:00 25171169 /usr/lib/libgcc_s.so.1 7f84425ed000-7f84427ed000 rw-p 00000000 00:00 0 7f84427ed000-7f84429cf000 r--p 00000000 fe:00 25186508 /usr/lib/locale/locale-archive 7f84429cf000-7f8442b64000 r-xp 00000000 fe:00 25171021 /usr/lib/libc-2.24.90.so 7f8442b64000-7f8442d63000 ---p 00195000 fe:00 25171021 /usr/lib/libc-2.24.90.so 7f8442d63000-7f8442d67000 r--p 00194000 fe:00 25171021 /usr/lib/libc-2.24.90.so 7f8442d67000-7f8442d69000 rw-p 00198000 fe:00 25171021 /usr/lib/libc-2.24.90.so 7f8442d69000-7f8442d6d000 rw-p 00000000 00:00 0 7f8442d6d000-7f8442e70000 r-xp 00000000 fe:00 25171130 /usr/lib/libm-2.24.90.so 7f8442e70000-7f844306f000 ---p 00103000 fe:00 25171130 /usr/lib/libm-2.24.90.so 7f844306f000-7f8443070000 r--p 00102000 fe:00 25171130 /usr/lib/libm-2.24.90.so 7f8443070000-7f8443071000 rw-p 00103000 fe:00 25171130 /usr/lib/libm-2.24.90.so 7f8443071000-7f8443086000 r-xp 00000000 fe:00 25167473 /usr/lib/libz.so.1.2.8 7f8443086000-7f8443285000 ---p 00015000 fe:00 25167473 /usr/lib/libz.so.1.2.8 7f8443285000-7f8443286000 r--p 00014000 fe:00 25167473 /usr/lib/libz.so.1.2.8 7f8443286000-7f8443287000 rw-p 00015000 fe:00 25167473 /usr/lib/libz.so.1.2.8 7f8443287000-7f8443289000 r-xp 00000000 fe:00 25171047 /usr/lib/libdl-2.24.90.so 7f8443289000-7f8443489000 ---p 00002000 fe:00 25171047 /usr/lib/libdl-2.24.90.so 7f8443489000-7f844348a000 r--p 00002000 fe:00 25171047 /usr/lib/libdl-2.24.90.so 7f844348a000-7f844348b000 rw-p 00003000 fe:00 25171047 /usr/lib/libdl-2.24.90.so 7f844348b000-7f844351d000 r-xp 00000000 fe:00 25171079 /usr/lib/libgmp.so.10.3.1 7f844351d000-7f844371c000 ---p 00092000 fe:00 25171079 /usr/lib/libgmp.so.10.3.1 7f844371c000-7f844371d000 r--p 00091000 fe:00 25171079 /usr/lib/libgmp.so.10.3.1 7f844371d000-7f844371e000 rw-p 00092000 fe:00 25171079 /usr/lib/libgmp.so.10.3.1 7f844371e000-7f844377f000 r-xp 00000000 fe:00 25171142 /usr/lib/libmpfr.so.4.1.5 7f844377f000-7f844397e000 ---p 00061000 fe:00 25171142 /usr/lib/libmpfr.so.4.1.5 7f844397e000-7f8443980000 r--p 00060000 fe:00 25171142 /usr/lib/libmpfr.so.4.1.5 7f8443980000-7f8443981000 rw-p 00062000 fe:00 25171142 /usr/lib/libmpfr.so.4.1.5 7f8443981000-7f8443999000 r-xp 00000000 fe:00 25171141 /usr/lib/libmpc.so.3.0.0 7f8443999000-7f8443b98000 ---p 00018000 fe:00 25171141 /usr/lib/libmpc.so.3.0.0 7f8443b98000-7f8443b99000 r--p 00017000 fe:00 25171141 /usr/lib/libmpc.so.3.0.0 7f8443b99000-7f8443b9a000 rw-p 00018000 fe:00 25171141 /usr/lib/libmpc.so.3.0.0 7f8443b9a000-7f8443bbd000 r-xp 00000000 fe:00 25170933 /usr/lib/ld-2.24.90.so 7f8443d69000-7f8443d70000 rw-p 00000000 00:00 0 7f8443d87000-7f8443dbc000 rw-p 00000000 00:00 0 7f8443dbc000-7f8443dbd000 r--p 00022000 fe:00 25170933 /usr/lib/ld-2.24.90.so 7f8443dbd000-7f8443dbe000 rw-p 00023000 fe:00 25170933 /usr/lib/ld-2.24.90.so 7f8443dbe000-7f8443dbf000 rw-p 00000000 00:00 0 7ffeb0702000-7ffeb0724000 rw-p 00000000 00:00 0 [stack] 7ffeb07a6000-7ffeb07a8000 r--p 00000000 00:00 0 [vvar] 7ffeb07a8000-7ffeb07aa000 r-xp 00000000 00:00 0 [vdso] ^C