llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: None (bala-bhargav)

<details>
<summary>Changes</summary>

In clang-repl, expressions typed without a semicolon have their values printed 
to the console. This means the return value is actually being used, not 
discarded.
However, the compiler was emitting `[[nodiscard]]` warnings because it didn't 
know the REPL would use the value for printing.
This fix detects when we're in REPL mode evaluating a top-level expression and 
skips the warning, since printing the result counts as "using" it.


---
Full diff: https://github.com/llvm/llvm-project/pull/178661.diff


1 Files Affected:

- (modified) clang/lib/Sema/SemaStmt.cpp (+10) 


``````````diff
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 5ab10fdfc7b74..468bb4a544026 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -239,6 +239,16 @@ void DiagnoseUnused(Sema &S, const Expr *E, 
std::optional<unsigned> DiagID) {
   if (S.isUnevaluatedContext())
     return;
 
+  // In incremental processing mode (REPL), expressions inside TopLevelStmtDecl
+  // without a semicolon will have their values printed by the value printing
+  // mechanism. The result is therefore "used" and we should not warn about
+  // [[nodiscard]] attributes.
+  if (S.PP.isIncrementalProcessingEnabled()) {
+    if (isa<TopLevelStmtDecl>(S.CurContext))
+      return;
+  }
+
+
   SourceLocation ExprLoc = E->IgnoreParenImpCasts()->getExprLoc();
   // In most cases, we don't want to warn if the expression is written in a
   // macro body, or if the macro comes from a system header. If the offending

``````````

</details>


https://github.com/llvm/llvm-project/pull/178661
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to