mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-03 14:08:57 +00:00
4b70bfc905
The inalloca attribute is designed to support passing C++ objects by value in the Microsoft C++ ABI. It behaves the same as byval, except that it always implies that the argument is in memory and that the bytes are never copied. This attribute allows the caller to take the address of an outgoing argument's memory and execute arbitrary code to store into it. This patch adds basic IR support, docs, and verification. It does not attempt to implement any lowering or fix any possibly broken transforms. When this patch lands, a complete description of this feature should appear at http://llvm.org/docs/InAlloca.html . Differential Revision: http://llvm-reviews.chandlerc.com/D2173 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197645 91177308-0d34-0410-b5e6-96231b3b80d8
20 lines
558 B
LLVM
20 lines
558 B
LLVM
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
|
|
|
|
declare void @a(i64* byval inalloca %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @b(i64* inreg inalloca %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @c(i64* sret inalloca %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @d(i64* nest inalloca %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @e(i64* readonly inalloca %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @f(void ()* inalloca %p)
|
|
; CHECK: do not support unsized types
|