================
@@ -11444,9 +11444,12 @@ static void DiagnoseBadShiftValues(Sema& S, ExprResult 
&LHS, ExprResult &RHS,
   llvm::APSInt Right = RHSResult.Val.getInt();
 
   if (Right.isNegative()) {
-    S.DiagRuntimeBehavior(Loc, RHS.get(),
-                          S.PDiag(diag::warn_shift_negative)
-                            << RHS.get()->getSourceRange());
+    if (S.ExprEvalContexts.back().isConstantEvaluated())
+      S.Diag(Loc, diag::warn_shift_negative) << RHS.get()->getSourceRange();
+    else
+      S.DiagRuntimeBehavior(Loc, RHS.get(),
+                            S.PDiag(diag::warn_shift_negative)
+                              << RHS.get()->getSourceRange());
----------------
budimirarandjelovicsyrmia wrote:

Diagnose is caught in handleIntIntBinOp() and is emitted for C++ in 
VerifyIntegerConstantExpression(). There are two reasons why diagnostic could 
be emitted in case of C++:
        1) evaluating expression as rvalue fails or evaluation result has side 
effects or it is not an integer; evaluating expression as rvalue fails if 
function handleIntIntBinOp() returns false
        2) folding is allowed (CanFold == AllowFoldKind::AllowFold); this value 
depends on place where constant expression is defined; eg. in case on enum 
folding is allowed and in case of static assertion it is not allowed
Also, diagnostic would not be emitted if Diagnoser is suppresed.

However, in C case there are no diagnostic for integer constant expression.

So I enabled diagnosing in C case (if Diagnoser is not suppressed). In function 
EvaluateKnownConstIntCheckOverflow() it is expected that evaluating rvalue is 
successful, so I keep handleIntIntBinOp() returning true.
For C++ diagnostic, I modified handleIntIntBinOp() to return false.

As folding is allowed for enum and not for static assertion, I added in tests 
to check both enum and static assertion diagnosing.

https://github.com/llvm/llvm-project/pull/70307
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to