llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Iris Shi (el-ev)

<details>
<summary>Changes</summary>

- Closes #<!-- -->151787

Insert the right parenthesis one token later to correctly enclose the 
expression.

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


3 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (+2) 
- (modified) clang/lib/Sema/SemaTemplateVariadic.cpp (+1-1) 
- (added) clang/test/FixIt/fixit-c++17.cpp (+13) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 247d784739f4d..d049211298347 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -123,6 +123,8 @@ Improvements to Clang's diagnostics
   Moved the warning for a missing (though implied) attribute on a 
redeclaration into this group.
   Added a new warning in this group for the case where the attribute is 
missing/implicit on
   an override of a virtual method.
+- Fixed fix-it hint for fold expressions. Clang now correctly places the 
suggested right 
+  parenthesis when diagnosing malformed fold expressions.
 
 Improvements to Clang's time-trace
 ----------------------------------
diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp 
b/clang/lib/Sema/SemaTemplateVariadic.cpp
index 572dbf2e7393f..83f989222cb20 100644
--- a/clang/lib/Sema/SemaTemplateVariadic.cpp
+++ b/clang/lib/Sema/SemaTemplateVariadic.cpp
@@ -1387,7 +1387,7 @@ static void CheckFoldOperand(Sema &S, Expr *E) {
     S.Diag(E->getExprLoc(), diag::err_fold_expression_bad_operand)
         << E->getSourceRange()
         << FixItHint::CreateInsertion(E->getBeginLoc(), "(")
-        << FixItHint::CreateInsertion(E->getEndLoc(), ")");
+        << FixItHint::CreateInsertion(E->getEndLoc().getLocWithOffset(1), ")");
   }
 }
 
diff --git a/clang/test/FixIt/fixit-c++17.cpp b/clang/test/FixIt/fixit-c++17.cpp
new file mode 100644
index 0000000000000..76d4268a2981f
--- /dev/null
+++ b/clang/test/FixIt/fixit-c++17.cpp
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -verify -std=c++17 -pedantic-errors %s
+// RUN: cp %s %t
+// RUN: not %clang_cc1 -x c++ -std=c++17 -fixit %t
+// RUN: %clang_cc1 -Wall -pedantic-errors -x c++ -std=c++17 %t
+
+/* This is a test of the various code modification hints that only
+   apply in C++17. */
+template<int... args>
+int foo() {
+    return (args + 1 + ...); // expected-error {{expression not permitted as 
operand of fold expression}}
+}
+// CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:13-[[@LINE-2]]:13}:"("
+// CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:21-[[@LINE-3]]:21}:")"

``````````

</details>


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

Reply via email to