Skip to content
Snippets Groups Projects
  • Manman Ren's avatar
    7e311b82
    [i386 ABI] expand small C like structs in C++, just like how we handle small · 7e311b82
    Manman Ren authored
    C structs.
    
    This comes up when we have a function that takes a struct and is defined in a
    C++ file and used in a C file.
    
    Before this commit, we will generate byval for C++ and will expand the struct
    for C, thus causing difference at IR level. We will use bitcast of function type
    at the callsite, which causes the inliner to not inline the function.
    
    This commit changes how we handle small C like structs at IR level, but at
    backend, we should generate the same argument passing before and after the
    commit.
    
    Note that the condition for expanding is still over conservative. We should be
    able to expand type that is spelled with “class” and types that are not C-like.
    But this commit fixes the inconsistent argument passing between C/C++.
    
    Reviewed by John.
    
    rdar://20121030
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234033 91177308-0d34-0410-b5e6-96231b3b80d8
    7e311b82
    History
    [i386 ABI] expand small C like structs in C++, just like how we handle small
    Manman Ren authored
    C structs.
    
    This comes up when we have a function that takes a struct and is defined in a
    C++ file and used in a C file.
    
    Before this commit, we will generate byval for C++ and will expand the struct
    for C, thus causing difference at IR level. We will use bitcast of function type
    at the callsite, which causes the inliner to not inline the function.
    
    This commit changes how we handle small C like structs at IR level, but at
    backend, we should generate the same argument passing before and after the
    commit.
    
    Note that the condition for expanding is still over conservative. We should be
    able to expand type that is spelled with “class” and types that are not C-like.
    But this commit fixes the inconsistent argument passing between C/C++.
    
    Reviewed by John.
    
    rdar://20121030
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234033 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.