forked from OSchip/llvm-project
fix rdar://8445858 - __sync_* intrinsics erroneously reject ObjC pointers
llvm-svn: 114209
This commit is contained in:
parent
aaf44b2237
commit
bb3bcd868a
|
@ -427,7 +427,7 @@ Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {
|
|||
|
||||
QualType ValType =
|
||||
FirstArg->getType()->getAs<PointerType>()->getPointeeType();
|
||||
if (!ValType->isIntegerType() && !ValType->isPointerType() &&
|
||||
if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
|
||||
!ValType->isBlockPointerType()) {
|
||||
Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer_intptr)
|
||||
<< FirstArg->getType() << FirstArg->getSourceRange();
|
||||
|
|
|
@ -22,3 +22,13 @@ void test2() {
|
|||
|
||||
#define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
|
||||
void (^foo)(int, int) = ^(int x, int y) { int z = MAX(x, y); };
|
||||
|
||||
|
||||
|
||||
// rdar://8445858
|
||||
@class Object;
|
||||
static Object *g;
|
||||
void test3(Object *o) {
|
||||
// this is ok.
|
||||
__sync_bool_compare_and_swap(&g, 0, o);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue