diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 3 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 22 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 21 |
4 files changed, 34 insertions, 19 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 435d94c1d47..ce413083445 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -4365,7 +4365,8 @@ bool IntExprEvaluator::VisitCallExpr(const CallExpr *E) { return Error(E); - case Builtin::BI__atomic_is_lock_free: { + case Builtin::BI__atomic_is_lock_free: + case Builtin::BI__c11_atomic_is_lock_free: { APSInt SizeVal; if (!EvaluateInteger(E->getArg(0), SizeVal, Info)) return false; diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index ef5eefb306c..651b88b5d32 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1109,37 +1109,37 @@ void StmtPrinter::VisitAtomicExpr(AtomicExpr *Node) { const char *Name = 0; switch (Node->getOp()) { case AtomicExpr::Init: - Name = "__atomic_init("; + Name = "__c11_atomic_init("; break; case AtomicExpr::Load: - Name = "__atomic_load("; + Name = "__c11_atomic_load("; break; case AtomicExpr::Store: - Name = "__atomic_store("; + Name = "__c11_atomic_store("; break; case AtomicExpr::CmpXchgStrong: - Name = "__atomic_compare_exchange_strong("; + Name = "__c11_atomic_compare_exchange_strong("; break; case AtomicExpr::CmpXchgWeak: - Name = "__atomic_compare_exchange_weak("; + Name = "__c11_atomic_compare_exchange_weak("; break; case AtomicExpr::Xchg: - Name = "__atomic_exchange("; + Name = "__c11_atomic_exchange("; break; case AtomicExpr::Add: - Name = "__atomic_fetch_add("; + Name = "__c11_atomic_fetch_add("; break; case AtomicExpr::Sub: - Name = "__atomic_fetch_sub("; + Name = "__c11_atomic_fetch_sub("; break; case AtomicExpr::And: - Name = "__atomic_fetch_and("; + Name = "__c11_atomic_fetch_and("; break; case AtomicExpr::Or: - Name = "__atomic_fetch_or("; + Name = "__c11_atomic_fetch_or("; break; case AtomicExpr::Xor: - Name = "__atomic_fetch_xor("; + Name = "__c11_atomic_fetch_xor("; break; } OS << Name; diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index eb849f6e99c..5eab5db94a5 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -967,9 +967,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, } case Builtin::BI__atomic_thread_fence: - case Builtin::BI__atomic_signal_fence: { + case Builtin::BI__atomic_signal_fence: + case Builtin::BI__c11_atomic_thread_fence: + case Builtin::BI__c11_atomic_signal_fence: { llvm::SynchronizationScope Scope; - if (BuiltinID == Builtin::BI__atomic_signal_fence) + if (BuiltinID == Builtin::BI__atomic_signal_fence || + BuiltinID == Builtin::BI__c11_atomic_signal_fence) Scope = llvm::SingleThread; else Scope = llvm::CrossThread; diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 74832fd32ed..c4ed0b0e529 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -251,28 +251,39 @@ Sema::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { case Builtin::BI__sync_swap_16: return SemaBuiltinAtomicOverloaded(move(TheCallResult)); case Builtin::BI__atomic_load: + case Builtin::BI__c11_atomic_load: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Load); case Builtin::BI__atomic_store: + case Builtin::BI__c11_atomic_store: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Store); case Builtin::BI__atomic_init: + case Builtin::BI__c11_atomic_init: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Init); case Builtin::BI__atomic_exchange: + case Builtin::BI__c11_atomic_exchange: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Xchg); case Builtin::BI__atomic_compare_exchange_strong: + case Builtin::BI__c11_atomic_compare_exchange_strong: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::CmpXchgStrong); case Builtin::BI__atomic_compare_exchange_weak: + case Builtin::BI__c11_atomic_compare_exchange_weak: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::CmpXchgWeak); case Builtin::BI__atomic_fetch_add: + case Builtin::BI__c11_atomic_fetch_add: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Add); case Builtin::BI__atomic_fetch_sub: + case Builtin::BI__c11_atomic_fetch_sub: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Sub); case Builtin::BI__atomic_fetch_and: + case Builtin::BI__c11_atomic_fetch_and: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::And); case Builtin::BI__atomic_fetch_or: + case Builtin::BI__c11_atomic_fetch_or: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Or); case Builtin::BI__atomic_fetch_xor: + case Builtin::BI__c11_atomic_fetch_xor: return SemaAtomicOpsOverloaded(move(TheCallResult), AtomicExpr::Xor); case Builtin::BI__builtin_annotation: if (CheckBuiltinAnnotationString(*this, TheCall->getArg(1))) @@ -510,11 +521,11 @@ Sema::SemaAtomicOpsOverloaded(ExprResult TheCallResult, AtomicExpr::AtomicOp Op) DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); // All these operations take one of the following four forms: - // T __atomic_load(_Atomic(T)*, int) (loads) - // T* __atomic_add(_Atomic(T*)*, ptrdiff_t, int) (pointer add/sub) - // int __atomic_compare_exchange_strong(_Atomic(T)*, T*, T, int, int) - // (cmpxchg) - // T __atomic_exchange(_Atomic(T)*, T, int) (everything else) + // T __c11_atomic_load(_Atomic(T)*, int) (loads) + // T* __c11_atomic_add(_Atomic(T*)*, ptrdiff_t, int) (pointer add/sub) + // int __c11_atomic_compare_exchange_strong(_Atomic(T)*, T*, T, int, int) + // (cmpxchg) + // T __c11_atomic_exchange(_Atomic(T)*, T, int) (everything else) // where T is an appropriate type, and the int paremeterss are for orderings. unsigned NumVals = 1; unsigned NumOrders = 1; |