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

Reply via email to