diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -15501,8 +15501,10 @@ Optional Expr::getIntegerConstantExpr(const ASTContext &Ctx, SourceLocation *Loc, bool isEvaluated) const { - assert(!isValueDependent() && - "Expression evaluator can't be called on a dependent expression."); + if (isValueDependent()) { + // Expression evaluator can't succeed on a dependent expression. + return None; + } APSInt Value; diff --git a/clang/test/SemaTemplate/atomics.cpp b/clang/test/SemaTemplate/atomics.cpp --- a/clang/test/SemaTemplate/atomics.cpp +++ b/clang/test/SemaTemplate/atomics.cpp @@ -15,3 +15,13 @@ } void h() { g(0); } } + +// Can pass value dependent integer to atomic builtin +template +void fetchAdd(int *A, int V) { + __atomic_fetch_add(A, V, Order); +} + +void fetchAddUse(int *A, int V) { + fetchAdd<__ATOMIC_ACQ_REL>(A, V); +}