mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
b227a46d3d
A couple of attributes had explicit checks for incompatibility with pointer types. However, this is already handled generically by the typeIncompatible() check. We can drop these after adding SwiftError to typeIncompatible(). However, the previous implementation of the check prints out all attributes that are incompatible with a given type, even though those attributes aren't actually used. This has the annoying result that the error message changes every time a new attribute is added to the list. Improve this by explicitly finding which attribute isn't compatible and printing just that.
35 lines
1.1 KiB
LLVM
35 lines
1.1 KiB
LLVM
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
|
|
|
|
declare void @a(i64* byval(i64) inalloca(i64) %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @b(i64* inreg inalloca(i64) %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @c(i64* sret(i64) inalloca(i64) %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @d(i64* nest inalloca(i64) %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @e(i64* readonly inalloca(i64) %p)
|
|
; CHECK: Attributes {{.*}} are incompatible
|
|
|
|
declare void @f(void ()* inalloca(void()) %p)
|
|
; CHECK: Attribute 'inalloca' does not support unsized types
|
|
|
|
declare void @g(i32* inalloca(i32) %p, i32 %p2)
|
|
; CHECK: inalloca isn't on the last parameter!
|
|
|
|
; CHECK: Attribute 'inalloca' type does not match parameter!
|
|
; CHECK-NEXT: void (i32*)* @inalloca_mismatched_pointee_type0
|
|
define void @inalloca_mismatched_pointee_type0(i32* inalloca(i8)) {
|
|
ret void
|
|
}
|
|
|
|
; CHECK: Attribute 'inalloca(i8)' applied to incompatible type!
|
|
; CHECK-NEXT: void (i8)* @inalloca_not_pointer
|
|
define void @inalloca_not_pointer(i8 inalloca(i8)) {
|
|
ret void
|
|
}
|