Author: Bevin Hansson Date: 2020-06-26T13:38:11+02:00 New Revision: da2f852e1913a16a1c6940ce3d3e47158ae5ba0e
URL: https://github.com/llvm/llvm-project/commit/da2f852e1913a16a1c6940ce3d3e47158ae5ba0e DIFF: https://github.com/llvm/llvm-project/commit/da2f852e1913a16a1c6940ce3d3e47158ae5ba0e.diff LOG: [AST] Fix certain consteval assignment and comma operator issues with fixed-point types. Summary: Assignment and comma operators for fixed-point types were being constevaled as other binary operators, but they need special treatment. Reviewers: rjmccall, leonardchan, bjope Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D73189 Added: clang/test/Frontend/fixed_point_crash.c Modified: clang/lib/AST/ExprConstant.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 35b5bad677a0..ebe09c99429f 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -12920,6 +12920,9 @@ bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) { } bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) { + if (E->isPtrMemOp() || E->isAssignmentOp() || E->getOpcode() == BO_Comma) + return ExprEvaluatorBaseTy::VisitBinaryOperator(E); + const Expr *LHS = E->getLHS(); const Expr *RHS = E->getRHS(); FixedPointSemantics ResultFXSema = diff --git a/clang/test/Frontend/fixed_point_crash.c b/clang/test/Frontend/fixed_point_crash.c new file mode 100644 index 000000000000..12dc1944f018 --- /dev/null +++ b/clang/test/Frontend/fixed_point_crash.c @@ -0,0 +1,20 @@ +// RUN: %clang_cc1 -verify -ffixed-point %s + +union a { + _Accum x; + int i; +}; + +int fn1() { + union a m; + m.x = 5.6k; + return m.i; +} + +int fn2() { + union a m; + m.x = 7, 5.6k; // expected-warning {{expression result unused}} + return m.x, m.i; // expected-warning {{expression result unused}} +} + +_Accum acc = (0.5r, 6.9k); // expected-warning {{expression result unused}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits