Skip to content

Commit c83472e

Browse files
committedMar 11, 2014
Sema: demote invalid atomic ordering message to warning.
Someone could write: if (0) { __c11_atomic_load(ptr, memory_order_release); } or the equivalent, which is perfectly valid, so we shouldn't outright reject invalid orderings on purely static grounds. rdar://problem/16242991 llvm-svn: 203564
1 parent f850227 commit c83472e

File tree

3 files changed

+23
-22
lines changed

3 files changed

+23
-22
lines changed
 

‎clang/include/clang/Basic/DiagnosticSemaKinds.td

+3-2
Original file line numberDiff line numberDiff line change
@@ -5689,8 +5689,9 @@ def err_atomic_op_needs_atomic_int_or_ptr : Error<
56895689
def err_atomic_op_bitwise_needs_atomic_int : Error<
56905690
"address argument to bitwise atomic operation must be a pointer to "
56915691
"%select{|atomic }0integer (%1 invalid)">;
5692-
def err_atomic_op_has_invalid_memory_order : Error<
5693-
"memory order argument to atomic operation is invalid">;
5692+
def warn_atomic_op_has_invalid_memory_order : Warning<
5693+
"memory order argument to atomic operation is invalid">,
5694+
InGroup<DiagGroup<"atomic-memory-ordering">>;
56945695

56955696
def err_atomic_load_store_uses_lib : Error<
56965697
"atomic %select{load|store}0 requires runtime support that is not "

‎clang/lib/Sema/SemaChecking.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -1231,9 +1231,9 @@ ExprResult Sema::SemaAtomicOpsOverloaded(ExprResult TheCallResult,
12311231
llvm::APSInt Result(32);
12321232
if (SubExprs[1]->isIntegerConstantExpr(Result, Context) &&
12331233
!isValidOrderingForOp(Result.getSExtValue(), Op))
1234-
return ExprError(Diag(SubExprs[1]->getLocStart(),
1235-
diag::err_atomic_op_has_invalid_memory_order)
1236-
<< SubExprs[1]->getSourceRange());
1234+
Diag(SubExprs[1]->getLocStart(),
1235+
diag::warn_atomic_op_has_invalid_memory_order)
1236+
<< SubExprs[1]->getSourceRange();
12371237
}
12381238

12391239
AtomicExpr *AE = new (Context) AtomicExpr(TheCall->getCallee()->getLocStart(),

‎clang/test/Sema/atomic-ops.c

+17-17
Original file line numberDiff line numberDiff line change
@@ -187,18 +187,18 @@ void memory_checks(_Atomic(int) *Ap, int *p, int val) {
187187
(void)__c11_atomic_load(Ap, memory_order_relaxed);
188188
(void)__c11_atomic_load(Ap, memory_order_acquire);
189189
(void)__c11_atomic_load(Ap, memory_order_consume);
190-
(void)__c11_atomic_load(Ap, memory_order_release); // expected-error {{memory order argument to atomic operation is invalid}}
191-
(void)__c11_atomic_load(Ap, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
190+
(void)__c11_atomic_load(Ap, memory_order_release); // expected-warning {{memory order argument to atomic operation is invalid}}
191+
(void)__c11_atomic_load(Ap, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
192192
(void)__c11_atomic_load(Ap, memory_order_seq_cst);
193193
(void)__c11_atomic_load(Ap, val);
194-
(void)__c11_atomic_load(Ap, -1); // expected-error {{memory order argument to atomic operation is invalid}}
195-
(void)__c11_atomic_load(Ap, 42); // expected-error {{memory order argument to atomic operation is invalid}}
194+
(void)__c11_atomic_load(Ap, -1); // expected-warning {{memory order argument to atomic operation is invalid}}
195+
(void)__c11_atomic_load(Ap, 42); // expected-warning {{memory order argument to atomic operation is invalid}}
196196

197197
(void)__c11_atomic_store(Ap, val, memory_order_relaxed);
198-
(void)__c11_atomic_store(Ap, val, memory_order_acquire); // expected-error {{memory order argument to atomic operation is invalid}}
199-
(void)__c11_atomic_store(Ap, val, memory_order_consume); // expected-error {{memory order argument to atomic operation is invalid}}
198+
(void)__c11_atomic_store(Ap, val, memory_order_acquire); // expected-warning {{memory order argument to atomic operation is invalid}}
199+
(void)__c11_atomic_store(Ap, val, memory_order_consume); // expected-warning {{memory order argument to atomic operation is invalid}}
200200
(void)__c11_atomic_store(Ap, val, memory_order_release);
201-
(void)__c11_atomic_store(Ap, val, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
201+
(void)__c11_atomic_store(Ap, val, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
202202
(void)__c11_atomic_store(Ap, val, memory_order_seq_cst);
203203

204204
(void)__c11_atomic_fetch_add(Ap, 1, memory_order_relaxed);
@@ -267,29 +267,29 @@ void memory_checks(_Atomic(int) *Ap, int *p, int val) {
267267
(void)__atomic_load_n(p, memory_order_relaxed);
268268
(void)__atomic_load_n(p, memory_order_acquire);
269269
(void)__atomic_load_n(p, memory_order_consume);
270-
(void)__atomic_load_n(p, memory_order_release); // expected-error {{memory order argument to atomic operation is invalid}}
271-
(void)__atomic_load_n(p, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
270+
(void)__atomic_load_n(p, memory_order_release); // expected-warning {{memory order argument to atomic operation is invalid}}
271+
(void)__atomic_load_n(p, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
272272
(void)__atomic_load_n(p, memory_order_seq_cst);
273273

274274
(void)__atomic_load(p, p, memory_order_relaxed);
275275
(void)__atomic_load(p, p, memory_order_acquire);
276276
(void)__atomic_load(p, p, memory_order_consume);
277-
(void)__atomic_load(p, p, memory_order_release); // expected-error {{memory order argument to atomic operation is invalid}}
278-
(void)__atomic_load(p, p, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
277+
(void)__atomic_load(p, p, memory_order_release); // expected-warning {{memory order argument to atomic operation is invalid}}
278+
(void)__atomic_load(p, p, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
279279
(void)__atomic_load(p, p, memory_order_seq_cst);
280280

281281
(void)__atomic_store(p, p, memory_order_relaxed);
282-
(void)__atomic_store(p, p, memory_order_acquire); // expected-error {{memory order argument to atomic operation is invalid}}
283-
(void)__atomic_store(p, p, memory_order_consume); // expected-error {{memory order argument to atomic operation is invalid}}
282+
(void)__atomic_store(p, p, memory_order_acquire); // expected-warning {{memory order argument to atomic operation is invalid}}
283+
(void)__atomic_store(p, p, memory_order_consume); // expected-warning {{memory order argument to atomic operation is invalid}}
284284
(void)__atomic_store(p, p, memory_order_release);
285-
(void)__atomic_store(p, p, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
285+
(void)__atomic_store(p, p, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
286286
(void)__atomic_store(p, p, memory_order_seq_cst);
287287

288288
(void)__atomic_store_n(p, val, memory_order_relaxed);
289-
(void)__atomic_store_n(p, val, memory_order_acquire); // expected-error {{memory order argument to atomic operation is invalid}}
290-
(void)__atomic_store_n(p, val, memory_order_consume); // expected-error {{memory order argument to atomic operation is invalid}}
289+
(void)__atomic_store_n(p, val, memory_order_acquire); // expected-warning {{memory order argument to atomic operation is invalid}}
290+
(void)__atomic_store_n(p, val, memory_order_consume); // expected-warning {{memory order argument to atomic operation is invalid}}
291291
(void)__atomic_store_n(p, val, memory_order_release);
292-
(void)__atomic_store_n(p, val, memory_order_acq_rel); // expected-error {{memory order argument to atomic operation is invalid}}
292+
(void)__atomic_store_n(p, val, memory_order_acq_rel); // expected-warning {{memory order argument to atomic operation is invalid}}
293293
(void)__atomic_store_n(p, val, memory_order_seq_cst);
294294

295295
(void)__atomic_fetch_add(p, val, memory_order_relaxed);

0 commit comments

Comments
 (0)