JonChesterfield updated this revision to Diff 381037. JonChesterfield added a comment.
- fix up call sites Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112159/new/ https://reviews.llvm.org/D112159 Files: clang/lib/AST/ExprConstant.cpp clang/test/SemaTemplate/atomics.cpp Index: clang/test/SemaTemplate/atomics.cpp =================================================================== --- clang/test/SemaTemplate/atomics.cpp +++ clang/test/SemaTemplate/atomics.cpp @@ -15,3 +15,13 @@ } void h() { g<int>(0); } } + +// Can pass value dependent integer to atomic builtin +template <int Order> +void fetchAdd(int *A, int V) { + __atomic_fetch_add(A, V, Order); +} + +void fetchAddUse(int *A, int V) { + fetchAdd<__ATOMIC_ACQ_REL>(A, V); +} Index: clang/lib/AST/ExprConstant.cpp =================================================================== --- clang/lib/AST/ExprConstant.cpp +++ clang/lib/AST/ExprConstant.cpp @@ -15501,8 +15501,10 @@ Optional<llvm::APSInt> 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;
Index: clang/test/SemaTemplate/atomics.cpp =================================================================== --- clang/test/SemaTemplate/atomics.cpp +++ clang/test/SemaTemplate/atomics.cpp @@ -15,3 +15,13 @@ } void h() { g<int>(0); } } + +// Can pass value dependent integer to atomic builtin +template <int Order> +void fetchAdd(int *A, int V) { + __atomic_fetch_add(A, V, Order); +} + +void fetchAddUse(int *A, int V) { + fetchAdd<__ATOMIC_ACQ_REL>(A, V); +} Index: clang/lib/AST/ExprConstant.cpp =================================================================== --- clang/lib/AST/ExprConstant.cpp +++ clang/lib/AST/ExprConstant.cpp @@ -15501,8 +15501,10 @@ Optional<llvm::APSInt> 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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits