Issue 179605
Summary movaps (16 byte aligned) generated instead of movups incorrectly for pointer (8 byte aligned) assignment
Labels new issue
Assignees
Reporter grooverdan
    
I have a class like:
````
   class Query_arena
  { 
  public:
    /*  
      List of items created in the parser for this query. Every item puts
      itself to the list on creation (see Item::Item() for details))
    */
    void *free_list;
    void *mem_root; 
    enum enum_state
    {
      STMT_INITIALIZED= 0, STMT_INITIALIZED_FOR_SP= 1, STMT_PREPARED= 2,
 STMT_CONVENTIONAL_EXECUTION= 3, STMT_EXECUTED= 4,
 STMT_SP_QUERY_ARGUMENTS= 5, STMT_ERROR= -1
    };
  
    enum_state state;

      
    void set_query_arena(Query_arena *set);
  
  };
 
 
  void Query_arena::set_query_arena(Query_arena *set)
  {
    mem_root= set->mem_root;
    free_list= set->free_list;
    state= set->state;
 }
```

Code generated by:

````
 clang --version
Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
```

Without -stdlib=libc++:
````
$ /usr/bin/clang++ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -D_FILE_OFFSET_BITS=64 -I/source/wsrep-lib/include -I/source/wsrep-lib/wsrep-API/v26 -I/build/include -I/source/include/providers -I/source/include -I/source/sql -I/source/zlib -I/build/zlib -I/build/sql -I/source/tpool  -O2 sql/CMakeFiles/sql.dir/sql_class.cc.o -MF sql/CMakeFiles/sql.dir/sql_class.cc.o.d -o sql/CMakeFiles/sql.dir/sql_class.cc.o -c /source/sql/sql_class.cc
clang++: warning: sql/CMakeFiles/sql.dir/sql_class.cc.o: 'linker' input unused [-Wunused-command-line-argument]
clang++: warning: argument unused during compilation: '-MF sql/CMakeFiles/sql.dir/sql_class.cc.o.d' [-Wunused-command-line-argument]

buildbot@dedc0770fda6:/build$ 
buildbot@dedc0770fda6:/build$ objdump -d sql/CMakeFiles/sql.dir/sql_class.cc.o | grep -A 100 _ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_ | more
000000000000b1b0 <_ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_>:
    b1b0:	41 57 	push   %r15
    b1b2:	41 56                	push   %r14
 b1b4:	53                   	push   %rbx
    b1b5:	80 7a 18 00 	cmpb   $0x0,0x18(%rdx)
    b1b9:	75 26                	jne    b1e1 <_ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_+0x31>
    b1bb:	0f 10 47 20          	movups 0x20(%rdi),%xmm0
    b1bf:	0f 11 42 08 	movups %xmm0,0x8(%rdx)
    b1c3:	8b 47 34             	mov 0x34(%rdi),%eax
    b1c6:	89 42 1c             	mov    %eax,0x1c(%rdx)
 b1c9:	0f 10 46 08          	movups 0x8(%rsi),%xmm0
    b1cd:	0f 11 47 20 	movups %xmm0,0x20(%rdi)

````

With -stdlib=libc++:
```
 /usr/bin/clang++ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -D_FILE_OFFSET_BITS=64 -I/source/wsrep-lib/include -I/source/wsrep-lib/wsrep-API/v26 -I/build/include -I/source/include/providers -I/source/include -I/source/sql -I/source/zlib -I/build/zlib -I/build/sql -I/source/tpool -stdlib=libc++ -O2 sql/CMakeFiles/sql.dir/sql_class.cc.o -MF sql/CMakeFiles/sql.dir/sql_class.cc.o.d -o sql/CMakeFiles/sql.dir/sql_class.cc.o -c /source/sql/sql_class.cc


000000000000b070 <_ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_>:
    b070:	41 57 	push   %r15
    b072:	41 56                	push   %r14
 b074:	53                   	push   %rbx
    b075:	80 7a 18 00 	cmpb   $0x0,0x18(%rdx)
    b079:	75 26                	jne    b0a1 <_ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_+0x31>
    b07b:	0f 28 47 20          	movaps 0x20(%rdi),%xmm0
    b07f:	0f 11 42 08 	movups %xmm0,0x8(%rdx)
    b083:	8b 47 34             	mov 0x34(%rdi),%eax
    b086:	89 42 1c             	mov    %eax,0x1c(%rdx)
 b089:	0f 10 46 08          	movups 0x8(%rsi),%xmm0
    b08d:	0f 29 47 20 	movaps %xmm0,0x20(%rdi)

```

The class allocation is a fairly normal.

This resulted in a SEGV - code below with sanitizer=memory, however functionally identical :
```
Thread 1 received signal SIGSEGV, Segmentation fault.
0x00005602d34313dd in Query_arena::set_query_arena (this=0x7ffc957f4360, set=0x72b0000ee030) at /source/sql/sql_class.cc:4281
4281	  free_list= set->free_list;
(rr) disassemble 
Dump of assembler code for function _ZN3THD25set_n_backup_active_arenaEP11Query_arenaS1_:
   0x00005602d34313b0 <+0>:	push   %rbp
   0x00005602d34313b1 <+1>:	mov    %rsp,%rbp
 0x00005602d34313b4 <+4>:	push   %r15
   0x00005602d34313b6 <+6>:	push %r14
   0x00005602d34313b8 <+8>:	push   %r13
   0x00005602d34313ba <+10>:	push   %r12
   0x00005602d34313bc <+12>:	push   %rbx
 0x00005602d34313bd <+13>:	sub    $0x38,%rsp
   0x00005602d34313c1 <+17>:	movabs $0x500000000000,%r14
   0x00005602d34313cb <+27>:	movabs $0x100000000000,%r8
   0x00005602d34313d5 <+37>:	lea    0x20(%rdi),%r9
 0x00005602d34313d9 <+41>:	lea    0x8(%rdx),%r13
=> 0x00005602d34313dd <+45>:	movaps 0x20(%rdi),%xmm2
````
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to