https://github.com/mizvekov updated 
https://github.com/llvm/llvm-project/pull/134769

>From e2c40042553845125914e544e696d7e21b553e7d Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizve...@gmail.com>
Date: Mon, 7 Apr 2025 22:44:20 -0300
Subject: [PATCH] [clang] consistently quote expressions in diagnostics

This changes the expression diagnostic printer to always add quotes,
and removes hardcoded quotes from the diagnostic format strings.

In some cases, a placeholder could be filled by either an expression
or as a string. In order to quote this consistently, a new modifier
was added, which can be used to quote strings.

One diagnostic was relying on unquoted expressions in order to
generate code suggestions. This diagnostic is converted to use fixit
hints instead.
---
 clang/docs/InternalsManual.rst                | 11 +++
 clang/docs/ReleaseNotes.rst                   |  1 +
 .../include/clang/Basic/DiagnosticASTKinds.td |  4 +-
 .../clang/Basic/DiagnosticParseKinds.td       |  2 +-
 .../clang/Basic/DiagnosticSemaKinds.td        | 70 ++++++++++---------
 clang/lib/AST/ASTDiagnostic.cpp               |  2 -
 clang/lib/Basic/Diagnostic.cpp                | 29 ++++----
 clang/lib/Sema/SemaChecking.cpp               |  5 +-
 clang/test/AST/ByteCode/literals.cpp          |  2 +-
 clang/test/C/C11/n1285.c                      | 20 +++---
 clang/test/CodeGenCXX/sections.cpp            |  6 +-
 clang/test/FixIt/fixit-bool.cpp               |  7 ++
 clang/test/Modules/odr_hash.cpp               |  4 +-
 clang/test/OpenMP/declare_variant_messages.c  | 12 ++--
 .../test/OpenMP/declare_variant_messages.cpp  | 18 ++---
 ...bute_parallel_for_simd_linear_messages.cpp |  4 +-
 .../distribute_simd_linear_messages.cpp       |  2 +-
 clang/test/OpenMP/for_linear_messages.cpp     |  2 +-
 .../test/OpenMP/for_simd_linear_messages.cpp  |  6 +-
 clang/test/OpenMP/for_simd_misc_messages.c    |  2 +-
 .../masked_taskloop_simd_linear_messages.cpp  |  6 +-
 .../master_taskloop_simd_linear_messages.cpp  |  6 +-
 .../OpenMP/parallel_for_linear_messages.cpp   |  2 +-
 .../parallel_for_simd_linear_messages.cpp     |  2 +-
 .../OpenMP/parallel_for_simd_misc_messages.c  |  2 +-
 ...l_masked_taskloop_simd_linear_messages.cpp |  8 +--
 ...l_master_taskloop_simd_linear_messages.cpp |  6 +-
 clang/test/OpenMP/simd_linear_messages.cpp    |  6 +-
 clang/test/OpenMP/simd_misc_messages.c        |  2 +-
 .../target_parallel_for_linear_messages.cpp   |  4 +-
 ...rget_parallel_for_simd_linear_messages.cpp |  4 +-
 .../OpenMP/target_simd_linear_messages.cpp    |  4 +-
 ...bute_parallel_for_simd_linear_messages.cpp |  2 +-
 ..._teams_distribute_simd_linear_messages.cpp |  2 +-
 clang/test/OpenMP/task_affinity_messages.cpp  |  2 +-
 clang/test/OpenMP/task_depend_messages.cpp    |  2 +-
 .../OpenMP/taskloop_simd_linear_messages.cpp  |  6 +-
 ...bute_parallel_for_simd_linear_messages.cpp |  2 +-
 .../teams_distribute_simd_linear_messages.cpp |  2 +-
 clang/test/Sema/code_align.c                  |  4 +-
 clang/test/Sema/warn-int-in-bool-context.c    | 24 +++----
 .../Sema/warn-lifetime-analysis-nocfg.cpp     | 26 +++----
 .../test/SemaCXX/attr-lifetime-capture-by.cpp | 10 +--
 clang/test/SemaCXX/attr-lifetimebound.cpp     | 14 ++--
 clang/test/SemaCXX/cxx2c-pack-indexing.cpp    | 14 ++--
 clang/test/SemaCXX/warn-dangling-local.cpp    |  6 +-
 .../test/SemaHLSL/BuiltIns/asuint-errors.hlsl |  8 +--
 .../test/SemaHLSL/BuiltIns/select-errors.hlsl |  2 +-
 .../SemaHLSL/BuiltIns/splitdouble-errors.hlsl | 24 +++----
 .../SemaHLSL/Language/OutputParameters.hlsl   |  8 +--
 clang/test/SemaHLSL/parameter_modifiers.hlsl  |  4 +-
 clang/test/SemaOpenCL/to_addr_builtin.cl      |  6 +-
 .../TableGen/ClangDiagnosticsEmitter.cpp      |  5 ++
 53 files changed, 235 insertions(+), 199 deletions(-)
 create mode 100644 clang/test/FixIt/fixit-bool.cpp

diff --git a/clang/docs/InternalsManual.rst b/clang/docs/InternalsManual.rst
index a2b551b6f333e..353a5f094cb1c 100644
--- a/clang/docs/InternalsManual.rst
+++ b/clang/docs/InternalsManual.rst
@@ -416,6 +416,17 @@ Description:
   and the modifier indexes in the substitution are re-numbered accordingly. The
   substituted text must itself be a valid format string before substitution.
 
+**"quoted" format**
+
+Example:
+  ``"expression %quoted0 evaluates to 0"``
+Class:
+  ``String``
+Description:
+  This is a simple formatter which adds quotes around the given string.
+  This is useful when the argument could be a string in some cases, but
+  another class in other cases, and it needs to be quoted consistently.
+
 .. _internals-producing-diag:
 
 Producing the Diagnostic
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 7ca04d9ebd44c..d3130ab088674 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -314,6 +314,7 @@ Improvements to Clang's diagnostics
 - Clang now respects the current language mode when printing expressions in
   diagnostics. This fixes a bunch of `bool` being printed as `_Bool`, and also
   a bunch of HLSL types being printed as their C++ equivalents.
+- Clang now consistently quotes expressions in diagnostics.
 - When printing types for diagnostics, clang now doesn't suppress the scopes of
   template arguments contained within nested names.
 - The ``-Wshift-bool`` warning has been added to warn about shifting a 
boolean. (#GH28334)
diff --git a/clang/include/clang/Basic/DiagnosticASTKinds.td 
b/clang/include/clang/Basic/DiagnosticASTKinds.td
index 8d69a2f2cf4a3..f73963752bb67 100644
--- a/clang/include/clang/Basic/DiagnosticASTKinds.td
+++ b/clang/include/clang/Basic/DiagnosticASTKinds.td
@@ -143,8 +143,8 @@ def note_constexpr_null_subobject : Note<
   "access array element of|perform pointer arithmetic on|"
   "access real component of|"
   "access imaginary component of}0 null pointer">;
-def note_constexpr_null_callee : Note<
-  "'%0' evaluates to a null function pointer">;
+def note_constexpr_null_callee
+    : Note<"%0 evaluates to a null function pointer">;
 def note_constexpr_function_param_value_unknown : Note<
   "function parameter %0 with unknown value cannot be used in a constant "
   "expression">;
diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td 
b/clang/include/clang/Basic/DiagnosticParseKinds.td
index f46e7fed28794..7a3cac528a363 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -1639,7 +1639,7 @@ def note_omp_ctx_compatible_set_and_selector_for_property
            "'match(%2={%1(%0)})'">;
 def warn_omp_ctx_incompatible_score_for_property
     : Warning<"the context selector '%0' in the context set '%1' cannot have a 
"
-              "score ('%2'); score ignored">,
+              "score (%quoted2); score ignored">,
       InGroup<OpenMPClauses>;
 def warn_omp_more_one_device_type_clause
     : Warning<"more than one 'device_type' clause is specified">,
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index a9ff821d49405..f4ab620ae61d2 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -167,9 +167,10 @@ def err_expr_not_string_literal : Error<"expression is not 
a string literal">;
 def ext_predef_outside_function : Warning<
   "predefined identifier is only valid inside function">,
   InGroup<DiagGroup<"predefined-identifier-outside-function">>;
-def ext_init_from_predefined : ExtWarn<
-  "initializing an array from a '%0' predefined identifier is a Microsoft 
extension">,
-  InGroup<MicrosoftInitFromPredefined>;
+def ext_init_from_predefined
+    : ExtWarn<"initializing an array from a %0 predefined identifier is a "
+              "Microsoft extension">,
+      InGroup<MicrosoftInitFromPredefined>;
 def ext_string_literal_from_predefined : ExtWarn<
   "expansion of predefined identifier '%0' to a string literal is a Microsoft 
extension">,
   InGroup<MicrosoftStringLiteralFromPredefined>;
@@ -3021,14 +3022,14 @@ def note_substituted_constraint_expr_is_ill_formed : 
Note<
   "because substituted constraint expression is ill-formed%0">;
 def note_constraint_references_error
     : Note<"constraint depends on a previously diagnosed expression">;
-def note_atomic_constraint_evaluated_to_false : Note<
-  "%select{and|because}0 '%1' evaluated to false">;
-def note_concept_specialization_constraint_evaluated_to_false : Note<
-  "%select{and|because}0 '%1' evaluated to false">;
+def note_atomic_constraint_evaluated_to_false
+    : Note<"%select{and|because}0 %1 evaluated to false">;
+def note_concept_specialization_constraint_evaluated_to_false
+    : Note<"%select{and|because}0 %1 evaluated to false">;
 def note_single_arg_concept_specialization_constraint_evaluated_to_false : 
Note<
   "%select{and|because}0 %1 does not satisfy %2">;
-def note_atomic_constraint_evaluated_to_false_elaborated : Note<
-  "%select{and|because}0 '%1' (%2 %3 %4) evaluated to false">;
+def note_atomic_constraint_evaluated_to_false_elaborated
+    : Note<"%select{and|because}0 %1 (%2 %3 %4) evaluated to false">;
 def note_is_deducible_constraint_evaluated_to_false : Note<
   "cannot deduce template arguments for %0 from %1">;
 def err_constrained_virtual_method : Error<
@@ -3048,14 +3049,14 @@ def note_expr_requirement_expr_substitution_error : 
Note<
   "%select{and|because}0 '%1' would be invalid: %2">;
 def note_expr_requirement_expr_unknown_substitution_error : Note<
   "%select{and|because}0 '%1' would be invalid">;
-def note_expr_requirement_noexcept_not_met : Note<
-  "%select{and|because}0 '%1' may throw an exception">;
+def note_expr_requirement_noexcept_not_met
+    : Note<"%select{and|because}0 %1 may throw an exception">;
 def note_expr_requirement_type_requirement_substitution_error : Note<
   "%select{and|because}0 '%1' would be invalid: %2">;
 def note_expr_requirement_type_requirement_unknown_substitution_error : Note<
   "%select{and|because}0 '%1' would be invalid">;
-def note_expr_requirement_constraints_not_satisfied : Note<
-  "%select{and|because}0 type constraint '%1' was not satisfied:">;
+def note_expr_requirement_constraints_not_satisfied
+    : Note<"%select{and|because}0 type constraint %1 was not satisfied:">;
 def note_expr_requirement_constraints_not_satisfied_simple : Note<
   "%select{and|because}0 %1 does not satisfy %2:">;
 def note_type_requirement_substitution_error : Note<
@@ -4356,9 +4357,9 @@ def note_reference_is_return_value : Note<"%0 returns a 
reference">;
 
 def note_pointer_declared_here : Note<
   "pointer %0 declared here">;
-def warn_division_sizeof_ptr : Warning<
-  "'%0' will return the size of the pointer, not the array itself">,
-  InGroup<DiagGroup<"sizeof-pointer-div">>;
+def warn_division_sizeof_ptr
+    : Warning<"%0 will return the size of the pointer, not the array itself">,
+      InGroup<DiagGroup<"sizeof-pointer-div">>;
 def warn_division_sizeof_array : Warning<
   "expression does not compute the number of elements in this array; element "
   "type is %0, not %1">,
@@ -5581,8 +5582,9 @@ def note_function_member_spec_matched : Note<
 def err_template_recursion_depth_exceeded : Error<
   "recursive template instantiation exceeded maximum depth of %0">,
   DefaultFatal, NoSFINAE;
-def err_constraint_depends_on_self : Error<
-  "satisfaction of constraint '%0' depends on itself">, NoSFINAE;
+def err_constraint_depends_on_self
+    : Error<"satisfaction of constraint %0 depends on itself">,
+      NoSFINAE;
 def note_template_recursion_depth : Note<
   "use -ftemplate-depth=N to increase recursive template instantiation depth">;
 
@@ -7098,8 +7100,8 @@ def warn_precedence_bitwise_rel : Warning<
   InGroup<Parentheses>;
 def note_precedence_bitwise_first : Note<
   "place parentheses around the %0 expression to evaluate it first">;
-def note_precedence_silence : Note<
-  "place parentheses around the '%0' expression to silence this warning">;
+def note_precedence_silence : Note<"place parentheses around the %quoted0 "
+                                   "expression to silence this warning">;
 
 def warn_precedence_conditional : Warning<
   "operator '?:' has lower precedence than '%0'; '%0' will be evaluated 
first">,
@@ -7117,9 +7119,11 @@ def warn_consecutive_comparison : Warning<
 def warn_enum_constant_in_bool_context : Warning<
   "converting the enum constant to a boolean">,
   InGroup<IntInBoolContext>, DefaultIgnore;
-def warn_left_shift_in_bool_context : Warning<
-  "converting the result of '<<' to a boolean; did you mean '(%0) != 0'?">,
-  InGroup<IntInBoolContext>, DefaultIgnore;
+def warn_left_shift_in_bool_context
+    : Warning<"converting the result of '<<' to a boolean; did you mean to "
+              "compare with '0'?">,
+      InGroup<IntInBoolContext>,
+      DefaultIgnore;
 def warn_logical_instead_of_bitwise : Warning<
   "use of logical '%0' with constant operand">,
   InGroup<DiagGroup<"constant-logical-operand">>;
@@ -10331,9 +10335,11 @@ def warn_dangling_pointer_assignment : Warning<
    "object backing %select{|the pointer }0%1 "
    "will be destroyed at the end of the full-expression">,
    InGroup<DanglingAssignment>;
-def warn_dangling_reference_captured : Warning<
-   "object whose reference is captured by '%0' will be destroyed at the end of 
"
-   "the full-expression">, InGroup<DanglingCapture>;
+def warn_dangling_reference_captured
+    : Warning<"object whose reference is captured by %0 will be destroyed at "
+              "the end of "
+              "the full-expression">,
+      InGroup<DanglingCapture>;
 def warn_dangling_reference_captured_by_unknown : Warning<
    "object whose reference is captured will be destroyed at the end of "
    "the full-expression">, InGroup<DanglingCapture>;
@@ -13038,15 +13044,15 @@ def note_acc_atomic_too_many_stmts
 def note_acc_atomic_expected_binop : Note<"expected binary operation on right "
                                           "hand side of assignment operator">;
 def note_acc_atomic_mismatch_operand
-    : Note<"left hand side of assignment operation('%0') must match one side "
-           "of the sub-operation on the right hand side('%1' and '%2')">;
+    : Note<"left hand side of assignment operation(%0) must match one side "
+           "of the sub-operation on the right hand side(%1 and %2)">;
 def note_acc_atomic_mismatch_compound_operand
     : Note<"variable %select{|in unary expression|on right hand side of "
            "assignment|on left hand side of assignment|on left hand side of "
-           "compound assignment|on left hand side of assignment}2('%3') must "
+           "compound assignment|on left hand side of assignment}2(%3) must "
            "match variable used %select{|in unary expression|on right hand "
            "side of assignment|<not possible>|on left hand side of compound "
-           "assignment|on left hand side of assignment}0('%1') from the first "
+           "assignment|on left hand side of assignment}0(%1) from the first "
            "statement">;
 def err_acc_declare_required_clauses
     : Error<"no valid clauses specified in OpenACC 'declare' directive">;
@@ -13066,9 +13072,9 @@ def err_acc_multiple_references
     : Error<"variable referenced in '%0' clause of OpenACC 'declare' directive 
"
             "was already referenced">;
 def err_acc_routine_not_func
-    : Error<"OpenACC routine name '%0' does not name a function">;
+    : Error<"OpenACC routine name %0 does not name a function">;
 def err_acc_routine_overload_set
-    : Error<"OpenACC routine name '%0' names a set of overloads">;
+    : Error<"OpenACC routine name %0 names a set of overloads">;
 def err_acc_magic_static_in_routine
     : Error<"function static variables are not permitted in functions to which 
"
             "an OpenACC 'routine' directive applies">;
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index 5c8acde452dbc..6cb09b0492ac9 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -512,8 +512,6 @@ void clang::FormatASTNodeDiagnosticArgument(
       const Expr *E = reinterpret_cast<Expr *>(Val);
       assert(E && "Received null Expr!");
       E->printPretty(OS, /*Helper=*/nullptr, Context.getPrintingPolicy());
-      // FIXME: Include quotes when printing expressions.
-      NeedQuotes = false;
       break;
     }
   }
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp
index 4b4a85aaccf8b..538c1d18a8ac1 100644
--- a/clang/lib/Basic/Diagnostic.cpp
+++ b/clang/lib/Basic/Diagnostic.cpp
@@ -1144,20 +1144,25 @@ FormatDiagnostic(const char *DiagStr, const char 
*DiagEnd,
 
     switch (Kind) {
     // ---- STRINGS ----
-    case DiagnosticsEngine::ak_std_string: {
-      const std::string &S = getArgStdStr(ArgNo);
-      assert(ModifierLen == 0 && "No modifiers for strings yet");
-      EscapeStringForDiagnostic(S, OutStr);
-      break;
-    }
+    case DiagnosticsEngine::ak_std_string:
     case DiagnosticsEngine::ak_c_string: {
-      const char *S = getArgCStr(ArgNo);
-      assert(ModifierLen == 0 && "No modifiers for strings yet");
-
-      // Don't crash if get passed a null pointer by accident.
-      if (!S)
-        S = "(null)";
+      StringRef S = [&]() -> StringRef {
+        if (Kind == DiagnosticsEngine::ak_std_string)
+          return getArgStdStr(ArgNo);
+        const char *SZ = getArgCStr(ArgNo);
+        // Don't crash if get passed a null pointer by accident.
+        return SZ ? SZ : "(null)";
+      }();
+      bool Quoted = false;
+      if (ModifierIs(Modifier, ModifierLen, "quoted")) {
+        Quoted = true;
+        OutStr.push_back('\'');
+      } else {
+        assert(ModifierLen == 0 && "unknown modifier for string");
+      }
       EscapeStringForDiagnostic(S, OutStr);
+      if (Quoted)
+        OutStr.push_back('\'');
       break;
     }
     // ---- INTEGERS ----
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 13bc2bd146213..d0143d29a4bcc 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -11685,7 +11685,10 @@ static void DiagnoseIntInBoolContext(Sema &S, Expr *E) 
{
         S.Diag(ExprLoc, diag::warn_left_shift_always)
             << (Result.Val.getInt() != 0);
       else if (E->getType()->isSignedIntegerType())
-        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context) << E;
+        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context)
+            << FixItHint::CreateInsertion(E->getBeginLoc(), "(")
+            << 
FixItHint::CreateInsertion(S.getLocForEndOfToken(E->getEndLoc()),
+                                          ") != 0");
     }
   }
 
diff --git a/clang/test/AST/ByteCode/literals.cpp 
b/clang/test/AST/ByteCode/literals.cpp
index 68d400bc31dd7..6b33c5cc22367 100644
--- a/clang/test/AST/ByteCode/literals.cpp
+++ b/clang/test/AST/ByteCode/literals.cpp
@@ -920,7 +920,7 @@ namespace CompoundLiterals {
   // null pointer suggests we're doing something odd during constant expression
   // evaluation: I think it's still taking 'x' as being null from the call to
   // f3() rather than tracking the assignment happening in the VLA.
-  constexpr int f3(int *x, int (*y)[*(x=(int[]){1,2,3})]) { // both-warning 
{{object backing the pointer x will be destroyed at the end of the 
full-expression}}
+  constexpr int f3(int *x, int (*y)[*(x=(int[]){1,2,3})]) { // both-warning 
{{object backing the pointer 'x' will be destroyed at the end of the 
full-expression}}
     return x[0]; // both-note {{read of dereferenced null pointer is not 
allowed in a constant expression}}
   }
   constexpr int h = f3(0,0); // both-error {{constexpr variable 'h' must be 
initialized by a constant expression}} \
diff --git a/clang/test/C/C11/n1285.c b/clang/test/C/C11/n1285.c
index f89baa8d06eb2..ae20cf33f22b1 100644
--- a/clang/test/C/C11/n1285.c
+++ b/clang/test/C/C11/n1285.c
@@ -32,8 +32,8 @@ void sink(int *);
 
 int func_return(void) {
   int *p = f().a; // expected-warning {{temporary whose address is used as 
value of local variable 'p' will be destroyed at the end of the 
full-expression}}
-  p = f().a;      // expected-warning {{object backing the pointer p will be 
destroyed at the end of the full-expression}}
-  p = g().a;      // expected-warning {{object backing the pointer p will be 
destroyed at the end of the full-expression}}
+  p = f().a;      // expected-warning {{object backing the pointer 'p' will be 
destroyed at the end of the full-expression}}
+  p = g().a;      // expected-warning {{object backing the pointer 'p' will be 
destroyed at the end of the full-expression}}
   sink(f().a);    // Ok
   return *f().a;  // Ok
 }
@@ -41,7 +41,7 @@ int func_return(void) {
 int ternary(void) {
   int *p = (1 ? (struct X){ 0 } : f()).a; // expected-warning {{temporary 
whose address is used as value of local variable 'p' will be destroyed at the 
end of the full-expression}}
   int *r = (1 ? (union U){ 0 } : g()).a;  // expected-warning {{temporary 
whose address is used as value of local variable 'r' will be destroyed at the 
end of the full-expression}}
-  p = (1 ? (struct X){ 0 } : f()).a;      // expected-warning {{object backing 
the pointer p will be destroyed at the end of the full-expression}}
+  p = (1 ? (struct X){ 0 } : f()).a;      // expected-warning {{object backing 
the pointer 'p' will be destroyed at the end of the full-expression}}
   sink((1 ? (struct X){ 0 } : f()).a);    // Ok
 
   // This intentionally gets one diagnostic in C and two in C++. In C, the
@@ -49,10 +49,10 @@ int ternary(void) {
   // only one branch results in a temporary in C but both branches do in C++.
   int *q = 1 ? (struct X){ 0 }.a : f().a; // expected-warning {{temporary 
whose address is used as value of local variable 'q' will be destroyed at the 
end of the full-expression}} \
                                              cpp-warning {{temporary whose 
address is used as value of local variable 'q' will be destroyed at the end of 
the full-expression}}
-  q = 1 ? (struct X){ 0 }.a : f().a; // expected-warning {{object backing the 
pointer q will be destroyed at the end of the full-expression}} \
-                                        cpp-warning {{object backing the 
pointer q will be destroyed at the end of the full-expression}}
-  q = 1 ? (struct X){ 0 }.a : g().a; // expected-warning {{object backing the 
pointer q will be destroyed at the end of the full-expression}} \
-                                        cpp-warning {{object backing the 
pointer q will be destroyed at the end of the full-expression}}
+  q = 1 ? (struct X){ 0 }.a : f().a; // expected-warning {{object backing the 
pointer 'q' will be destroyed at the end of the full-expression}} \
+                                        cpp-warning {{object backing the 
pointer 'q' will be destroyed at the end of the full-expression}}
+  q = 1 ? (struct X){ 0 }.a : g().a; // expected-warning {{object backing the 
pointer 'q' will be destroyed at the end of the full-expression}} \
+                                        cpp-warning {{object backing the 
pointer 'q' will be destroyed at the end of the full-expression}}
   sink(1 ? (struct X){ 0 }.a : f().a); // Ok
   return *(1 ? (struct X){ 0 }.a : f().a); // Ok
 }
@@ -60,7 +60,7 @@ int ternary(void) {
 int comma(void) {
   struct X x;
   int *p = ((void)0, x).a; // c-warning {{temporary whose address is used as 
value of local variable 'p' will be destroyed at the end of the 
full-expression}}
-  p = ((void)0, x).a;      // c-warning {{object backing the pointer p will be 
destroyed at the end of the full-expression}}
+  p = ((void)0, x).a;      // c-warning {{object backing the pointer 'p' will 
be destroyed at the end of the full-expression}}
   sink(((void)0, x).a);    // Ok
   return *(((void)0, x).a);// Ok
 }
@@ -68,7 +68,7 @@ int comma(void) {
 int cast(void) {
   struct X x;
   int *p = ((struct X)x).a;  // expected-warning {{temporary whose address is 
used as value of local variable 'p' will be destroyed at the end of the 
full-expression}}
-  p = ((struct X)x).a;       // expected-warning {{object backing the pointer 
p will be destroyed at the end of the full-expression}}
+  p = ((struct X)x).a;       // expected-warning {{object backing the pointer 
'p' will be destroyed at the end of the full-expression}}
   sink(((struct X)x).a);     // Ok
   return *(((struct X)x).a); // Ok
 }
@@ -76,7 +76,7 @@ int cast(void) {
 int assign(void) {
   struct X x, s;
   int *p = (x = s).a;  // c-warning {{temporary whose address is used as value 
of local variable 'p' will be destroyed at the end of the full-expression}}
-  p = (x = s).a;       // c-warning {{object backing the pointer p will be 
destroyed at the end of the full-expression}}
+  p = (x = s).a;       // c-warning {{object backing the pointer 'p' will be 
destroyed at the end of the full-expression}}
   sink((x = s).a);     // Ok
   return *((x = s).a); // Ok
 }
diff --git a/clang/test/CodeGenCXX/sections.cpp 
b/clang/test/CodeGenCXX/sections.cpp
index c7fe4e45ea05a..88efd7692b1e0 100644
--- a/clang/test/CodeGenCXX/sections.cpp
+++ b/clang/test/CodeGenCXX/sections.cpp
@@ -18,19 +18,19 @@ int D = 1;
 #pragma data_seg(".data")
 int a = 1;
 extern const Mutable mutable_custom_section;
-const Mutable mutable_custom_section; // expected-warning {{`#pragma 
const_seg` for section ".my_const" will not apply to 'mutable_custom_section' 
due to the presence of a mutable field}}
+const Mutable mutable_custom_section; // expected-warning {{`#pragma 
const_seg` for section '".my_const"' will not apply to 'mutable_custom_section' 
due to the presence of a mutable field}}
 extern const Normal normal_custom_section;
 const Normal normal_custom_section;
 struct NonTrivialDtor {
   ~NonTrivialDtor();
 };
 extern const NonTrivialDtor non_trivial_dtor_custom_section;
-const NonTrivialDtor non_trivial_dtor_custom_section; // expected-warning 
{{`#pragma const_seg` for section ".my_const" will not apply to 
'non_trivial_dtor_custom_section' due to the presence of a non-trivial 
destructor}}
+const NonTrivialDtor non_trivial_dtor_custom_section; // expected-warning 
{{`#pragma const_seg` for section '".my_const"' will not apply to 
'non_trivial_dtor_custom_section' due to the presence of a non-trivial 
destructor}}
 struct NonTrivialCtor {
   NonTrivialCtor();
 };
 extern const NonTrivialCtor non_trivial_ctor_custom_section;
-const NonTrivialCtor non_trivial_ctor_custom_section; // expected-warning 
{{`#pragma const_seg` for section ".my_const" will not apply to 
'non_trivial_ctor_custom_section' due to the presence of a non-trivial 
constructor}}
+const NonTrivialCtor non_trivial_ctor_custom_section; // expected-warning 
{{`#pragma const_seg` for section '".my_const"' will not apply to 
'non_trivial_ctor_custom_section' due to the presence of a non-trivial 
constructor}}
 #pragma data_seg(push, label, ".data2")
 extern const int b;
 const int b = 1;
diff --git a/clang/test/FixIt/fixit-bool.cpp b/clang/test/FixIt/fixit-bool.cpp
new file mode 100644
index 0000000000000..ddc8f7f7cdd22
--- /dev/null
+++ b/clang/test/FixIt/fixit-bool.cpp
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -fdiagnostics-parseable-fixits -std=c++26 
-Wint-in-bool-context %s 2>&1 | FileCheck %s
+
+int x;
+bool t1 = x << x;
+// CHECK-LABEL: 4:13: warning: converting the result of '<<' to a boolean
+// CHECK: fix-it:"{{.*}}":{4:11-4:11}:"("
+// CHECK-NEXT: fix-it:"{{.*}}":{4:17-4:17}:") != 0"
diff --git a/clang/test/Modules/odr_hash.cpp b/clang/test/Modules/odr_hash.cpp
index b0f5b904f2b39..da24b1fe8729a 100644
--- a/clang/test/Modules/odr_hash.cpp
+++ b/clang/test/Modules/odr_hash.cpp
@@ -3380,8 +3380,8 @@ struct S17 {
 };
 #else
 S17 s17;
-// expected-error@second.h:* {{'FunctionTemplate::S17' has different 
definitions in different modules; first difference is definition in module 
'SecondModule' found function template 'foo' with 1st template parameter with 
default argument 1 + 1}}
-// expected-note@first.h:* {{but in 'FirstModule' found function template 
'foo' with 1st template parameter with default argument 2}}
+// expected-error@second.h:* {{'FunctionTemplate::S17' has different 
definitions in different modules; first difference is definition in module 
'SecondModule' found function template 'foo' with 1st template parameter with 
default argument '1 + 1'}}
+// expected-note@first.h:* {{but in 'FirstModule' found function template 
'foo' with 1st template parameter with default argument '2'}}
 #endif
 
 #if defined(FIRST)
diff --git a/clang/test/OpenMP/declare_variant_messages.c 
b/clang/test/OpenMP/declare_variant_messages.c
index 14637d8200671..32e365cc415bd 100644
--- a/clang/test/OpenMP/declare_variant_messages.c
+++ b/clang/test/OpenMP/declare_variant_messages.c
@@ -34,7 +34,7 @@ int foo(void);
 #pragma omp declare variant(foo) match(implementation={vendor(score ibm)}) // 
expected-error {{expected '(' after 'score'}} expected-warning {{expected '':'' 
after the score expression; '':'' assumed}}
 #pragma omp declare variant(foo) match(implementation={vendor(score( ibm)}) // 
expected-error {{use of undeclared identifier 'ibm'}} expected-error {{expected 
')'}} expected-warning {{expected '':'' after the score expression; '':'' 
assumed}} expected-warning {{expected identifier or string literal describing a 
context property; property skipped}} expected-note {{context property options 
are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 'llvm' 'nec' 
'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}}
 #pragma omp declare variant(foo) match(implementation={vendor(score(2 ibm)}) 
// expected-error {{expected ')'}} expected-error {{expected ')'}} 
expected-warning {{expected '':'' after the score expression; '':'' assumed}} 
expected-warning {{expected identifier or string literal describing a context 
property; property skipped}} expected-note {{to match this '('}} expected-note 
{{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 
'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match 
this '('}}
-#pragma omp declare variant(foo) match(implementation={vendor(score(foo()) 
ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' 
assumed}} expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo() is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation={vendor(score(foo()) 
ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' 
assumed}} expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo()' is not and will be ignored}}
 #pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm), 
vendor(llvm)}) // expected-warning {{the context selector 'vendor' was used 
already in the same 'omp declare variant' directive; selector ignored}} 
expected-note {{the previous context selector 'vendor' used here}} 
expected-note {{the ignored selector spans until here}}
 #pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm), 
kind(cpu)}) // expected-warning {{the context selector 'kind' is not valid for 
the context set 'implementation'; selector ignored}} expected-note {{the 
context selector 'kind' can be nested in the context set 'device'; try 
'match(device={kind(property)})'}} expected-note {{the ignored selector spans 
until here}}
 #pragma omp declare variant(foo) match(device={xxx}) // expected-warning 
{{'xxx' is not a valid context selector for the context set 'device'; selector 
ignored}} expected-note {{context selector options are: 'kind' 'arch' 'isa'}} 
expected-note {{the ignored selector spans until here}}
@@ -53,18 +53,18 @@ int foo(void);
 #pragma omp declare variant(foo) match(target_device={kind}) // 
expected-warning {{the context selector 'kind' in context set 'target_device' 
requires a context property defined in parentheses; selector ignored}} 
expected-note {{the ignored selector spans until here}}
 #pragma omp declare variant(foo) match(target_device={kind(}) // 
expected-error {{expected ')'}} expected-warning {{expected identifier or 
string literal describing a context property; property skipped}} expected-note 
{{context property options are: 'host' 'nohost' 'cpu' 'gpu' 'fpga' 'any'}} 
expected-note {{to match this '('}}
 #pragma omp declare variant(foo) match(target_device={kind()}) // 
expected-warning {{expected identifier or string literal describing a context 
property; property skipped}} expected-note {{context property options are: 
'host' 'nohost' 'cpu' 'gpu' 'fpga' 'any'}}
-#pragma omp declare variant(foo) match(target_device={device_num}) // 
expected-warning {{the context selector 'device_num' in context set 
'target_device' requires a context property defined in parentheses; selector 
ignored}} expected-note {{the ignored selector spans until here}} 
+#pragma omp declare variant(foo) match(target_device={device_num}) // 
expected-warning {{the context selector 'device_num' in context set 
'target_device' requires a context property defined in parentheses; selector 
ignored}} expected-note {{the ignored selector spans until here}}
 #pragma omp declare variant(foo) match(target_device={device_num()}) // 
expected-error {{expected expression}}
 #pragma omp declare variant(foo) match(target_device={device_num(-1)}) // 
expected-error {{argument to 'device_num' clause must be a non-negative integer 
value}}
 #pragma omp declare variant(foo) match(target_device={device_num(abc)}) // 
expected-error {{expected expression}} expected-error {{use of undeclared 
identifier 'abc'}}
 int bar(void);
 
 
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo is not and will be ignored}}
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo() is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo' is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo()' is not and will be ignored}}
 #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) 
:llvm)}) // expected-error {{expected expression}} expected-error {{use of 
undeclared identifier 'expr'}} expected-error {{expected expression}}
-#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo is not}}
-#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo() is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo' is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo()' is not}}
 #pragma omp declare variant(foo) match(user = {condition(<expr>)}) // 
expected-error {{expected expression}} expected-error {{use of undeclared 
identifier 'expr'}} expected-error {{expected expression}} expected-note {{the 
ignored selector spans until here}}
 int score_and_cond_non_const(void);
 
diff --git a/clang/test/OpenMP/declare_variant_messages.cpp 
b/clang/test/OpenMP/declare_variant_messages.cpp
index 2d6e5bfc1f2f2..8eb37bc64cbc1 100644
--- a/clang/test/OpenMP/declare_variant_messages.cpp
+++ b/clang/test/OpenMP/declare_variant_messages.cpp
@@ -39,7 +39,7 @@ T foofoo();
 #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score 
ibm)}) // expected-error {{expected '(' after 'score'}} expected-warning 
{{expected '':'' after the score expression; '':'' assumed}}
 #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score( 
ibm)}) // expected-error {{use of undeclared identifier 'ibm'}} expected-error 
{{expected ')'}} expected-warning {{expected '':'' after the score expression; 
'':'' assumed}} expected-warning {{expected identifier or string literal 
describing a context property; property skipped}} expected-note {{context 
property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 
'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}}
 #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(2 
ibm)}) // expected-error {{expected ')'}} expected-error {{expected ')'}} 
expected-warning {{expected '':'' after the score expression; '':'' assumed}} 
expected-warning {{expected identifier or string literal describing a context 
property; property skipped}} expected-note {{to match this '('}} expected-note 
{{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 
'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match 
this '('}}
-#pragma omp declare variant(foofoo <int>) 
match(implementation={vendor(score(foofoo <int>()) ibm)}) // expected-warning 
{{expected '':'' after the score expression; '':'' assumed}} expected-warning 
{{score expressions in the OpenMP context selector need to be constant; 
foofoo<int>() is not and will be ignored}}
+#pragma omp declare variant(foofoo <int>) 
match(implementation={vendor(score(foofoo <int>()) ibm)}) // expected-warning 
{{expected '':'' after the score expression; '':'' assumed}} expected-warning 
{{score expressions in the OpenMP context selector need to be constant; 
'foofoo<int>()' is not and will be ignored}}
 #pragma omp declare variant(foofoo <int>) 
match(implementation={vendor(score(5): ibm), vendor(llvm)}) // expected-warning 
{{the context selector 'vendor' was used already in the same 'omp declare 
variant' directive; selector ignored}} expected-note {{the previous context 
selector 'vendor' used here}} expected-note {{the ignored selector spans until 
here}}
 #pragma omp declare variant(foofoo <int>) 
match(implementation={vendor(score(5): ibm), kind(cpu)}) // expected-warning 
{{the context selector 'kind' is not valid for the context set 
'implementation'; selector ignored}} expected-note {{the context selector 
'kind' can be nested in the context set 'device'; try 
'match(device={kind(property)})'}} expected-note {{the ignored selector spans 
until here}}
 #pragma omp declare variant(foofoo <int>) match(device={xxx}) // 
expected-warning {{'xxx' is not a valid context selector for the context set 
'device'; selector ignored}} expected-note {{context selector options are: 
'kind' 'arch' 'isa'}} expected-note {{the ignored selector spans until here}}
@@ -95,11 +95,11 @@ int bar();
 template <typename T, int C>
 T barbar();
 
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo is not and will be ignored}}
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo() is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo' is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo()' is not and will be ignored}}
 #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) 
:llvm)}) // expected-error {{expected expression}} expected-error {{use of 
undeclared identifier 'expr'}} expected-error {{expected expression}}
-#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo is not}}
-#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo() is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo' is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo()' is not}}
 #pragma omp declare variant(foo) match(user = {condition(<expr>)}) // 
expected-error {{expected expression}} expected-error {{use of undeclared 
identifier 'expr'}} expected-error {{expected expression}} expected-note {{the 
ignored selector spans until here}}
 int score_and_cond_non_const();
 
@@ -112,11 +112,11 @@ int score_and_cond_non_const();
 template<int C>
 int score_and_cond_non_const_no_inst();
 
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo is not and will be ignored}}
-#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; foo() is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo' is not and will be ignored}}
+#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) 
:llvm)}) // expected-warning {{score expressions in the OpenMP context selector 
need to be constant; 'foo()' is not and will be ignored}}
 #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) 
:llvm)}) // expected-error {{expected expression}} expected-error {{use of 
undeclared identifier 'expr'}} expected-error {{expected expression}}
-#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo is not}}
-#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; foo() is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo)}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo' is not}}
+#pragma omp declare variant(foo) match(user = {condition(foo())}) // 
expected-error {{the user condition in the OpenMP context selector needs to be 
constant; 'foo()' is not}}
 #pragma omp declare variant(foo) match(user = {condition(<C>)}) // 
expected-error {{expected expression}} expected-error {{expected expression}} 
expected-note {{the ignored selector spans until here}}
 template<int C>
 int score_and_cond_non_const_inst();
diff --git a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp 
b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
index be05533d43f9b..08d745f3b1a07 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
@@ -111,7 +111,7 @@ template<int LEN> int test_warn() {
   int ind2 = 0;
   #pragma omp target
   #pragma omp teams
-  #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero 
linear step (ind2 should probably be const)}}
+  #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero 
linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
@@ -355,7 +355,7 @@ int main(int argc, char **argv) {
       for (i = 0; i < argc; ++i) ++i;
     #pragma omp target
     #pragma omp teams
-    #pragma omp distribute parallel for simd linear(i: pval) // omp52-error 
{{use of undeclared identifier 'pval'}} 
+    #pragma omp distribute parallel for simd linear(i: pval) // omp52-error 
{{use of undeclared identifier 'pval'}}
       for (i = 0; i < argc; ++i) ++i;
     #pragma omp target
     #pragma omp teams
diff --git a/clang/test/OpenMP/distribute_simd_linear_messages.cpp 
b/clang/test/OpenMP/distribute_simd_linear_messages.cpp
index a56fd636b6f1a..64bcdb4812979 100644
--- a/clang/test/OpenMP/distribute_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_linear_messages.cpp
@@ -111,7 +111,7 @@ template<int LEN> int test_warn() {
   int ind2 = 0;
   #pragma omp target
   #pragma omp teams
-  #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero 
linear step (ind2 should probably be const)}}
+  #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero 
linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
diff --git a/clang/test/OpenMP/for_linear_messages.cpp 
b/clang/test/OpenMP/for_linear_messages.cpp
index 6253a3032c0e3..2e10230630adb 100644
--- a/clang/test/OpenMP/for_linear_messages.cpp
+++ b/clang/test/OpenMP/for_linear_messages.cpp
@@ -74,7 +74,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp for linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
diff --git a/clang/test/OpenMP/for_simd_linear_messages.cpp 
b/clang/test/OpenMP/for_simd_linear_messages.cpp
index a760675dcf34c..30c6f7274b5da 100644
--- a/clang/test/OpenMP/for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/for_simd_linear_messages.cpp
@@ -72,7 +72,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp for simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -228,7 +228,7 @@ int main(int argc, char **argv) {
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
-  #pragma omp for simd linear(i: step(1), step(2)) // omp52-error {{multiple 
'step size' found in linear clause}} 
+  #pragma omp for simd linear(i: step(1), step(2)) // omp52-error {{multiple 
'step size' found in linear clause}}
 #else
   #pragma omp for simd linear(i)
 #endif
@@ -236,7 +236,7 @@ int main(int argc, char **argv) {
 #ifdef OMP52
   #pragma omp for simd linear(j: step()) // omp52-error 2 {{expected 
expression}}
   for (int k = 0; k < argc; ++k) ++k;
-  #pragma omp for simd linear(j: pval) // omp52-error {{use of undeclared 
identifier 'pval'}} 
+  #pragma omp for simd linear(j: pval) // omp52-error {{use of undeclared 
identifier 'pval'}}
   for (int k = 0; k < argc; ++k) ++k;
   #pragma omp for simd linear(i: val, step(2 // omp52-error 3 {{expected ')'}} 
 omp52-note 2 {{to match this '('}}
   for (int k = 0; k < argc; ++k) ++k;
diff --git a/clang/test/OpenMP/for_simd_misc_messages.c 
b/clang/test/OpenMP/for_simd_misc_messages.c
index 700991014b765..5803d933af108 100644
--- a/clang/test/OpenMP/for_simd_misc_messages.c
+++ b/clang/test/OpenMP/for_simd_misc_messages.c
@@ -481,7 +481,7 @@ void test_linear(void) {
   for (i = 0; i < 16; ++i)
     ;
 
-// expected-warning@+1 {{zero linear step (x and other variables in clause 
should probably be const)}}
+// expected-warning@+1 {{zero linear step ('x' and other variables in clause 
should probably be const)}}
 #pragma omp for simd linear(x, y : 0)
   for (i = 0; i < 16; ++i)
     ;
diff --git a/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp 
b/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp
index 6072ad1b92445..f67af47fc1dfb 100644
--- a/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp
@@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp masked taskloop simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -274,13 +274,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp masked taskloop simd linear(j: ref)
-#else  
+#else
   #pragma omp masked taskloop simd linear(ref(j))
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
   #pragma omp masked taskloop simd linear(i: step(1), step(2)) // omp52-error 
{{multiple 'step size' found in linear clause}}
-#else  
+#else
   #pragma omp masked taskloop simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git a/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp 
b/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
index c1bf61b8183ec..555c81c34c703 100644
--- a/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
@@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp master taskloop simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -275,13 +275,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp master taskloop simd linear(j: ref)
-#else  
+#else
   #pragma omp master taskloop simd linear(ref(j)) // omp52-error {{old syntax 
'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 
'linear(list: [linear-modifier,] step(step-size))'}}
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
   #pragma omp master taskloop simd linear(i: step(1), step(2)) // omp52-error 
{{multiple 'step size' found in linear clause}}
-#else  
+#else
   #pragma omp master taskloop simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git a/clang/test/OpenMP/parallel_for_linear_messages.cpp 
b/clang/test/OpenMP/parallel_for_linear_messages.cpp
index 4e863de79fe0e..ba80c8e1ce689 100644
--- a/clang/test/OpenMP/parallel_for_linear_messages.cpp
+++ b/clang/test/OpenMP/parallel_for_linear_messages.cpp
@@ -83,7 +83,7 @@ T test_template(T *arr, N num) {
 template <int LEN>
 int test_warn() {
   int ind2 = 0;
-// expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
 #pragma omp parallel for linear(ind2 : LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
diff --git a/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp 
b/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp
index ab682e29cd93c..7d540bcac8640 100644
--- a/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp
@@ -71,7 +71,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp parallel for simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
diff --git a/clang/test/OpenMP/parallel_for_simd_misc_messages.c 
b/clang/test/OpenMP/parallel_for_simd_misc_messages.c
index 4cb37ba27107b..7d383d32e84d1 100644
--- a/clang/test/OpenMP/parallel_for_simd_misc_messages.c
+++ b/clang/test/OpenMP/parallel_for_simd_misc_messages.c
@@ -472,7 +472,7 @@ void test_linear(void) {
   for (i = 0; i < 16; ++i)
     ;
 
-// expected-warning@+1 {{zero linear step (x and other variables in clause 
should probably be const)}}
+// expected-warning@+1 {{zero linear step ('x' and other variables in clause 
should probably be const)}}
 #pragma omp parallel for simd linear(x, y : 0)
   for (i = 0; i < 16; ++i)
     ;
diff --git 
a/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp 
b/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp
index bda3ef09181a6..a3befd481aa90 100644
--- a/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp
@@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp parallel masked taskloop simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -275,13 +275,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp parallel masked taskloop simd linear(j: ref)
-#else  
+#else
   #pragma omp parallel masked taskloop simd linear(ref(j)) // omp52-error 
{{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new 
syntax 'linear(list: [linear-modifier,] step(step-size))'}}
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
-  #pragma omp parallel masked taskloop simd linear(i: step(1), step(2)) // 
omp52-error {{multiple 'step size' found in linear clause}} 
-#else  
+  #pragma omp parallel masked taskloop simd linear(i: step(1), step(2)) // 
omp52-error {{multiple 'step size' found in linear clause}}
+#else
   #pragma omp parallel masked taskloop simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git 
a/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp 
b/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
index 01a734cd927e2..b406f36df167b 100644
--- a/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
@@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp parallel master taskloop simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -275,13 +275,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp parallel master taskloop simd linear(j: ref)
-#else  
+#else
   #pragma omp parallel master taskloop simd linear(ref(j)) // omp52-error 
{{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new 
syntax 'linear(list: [linear-modifier,] step(step-size))'}}
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
   #pragma omp parallel master taskloop simd linear(i: step(1), step(2)) // 
omp52-error {{multiple 'step size' found in linear clause}}
-#else  
+#else
   #pragma omp parallel master taskloop simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git a/clang/test/OpenMP/simd_linear_messages.cpp 
b/clang/test/OpenMP/simd_linear_messages.cpp
index 68a2999fdf65a..3ce4de697de0c 100644
--- a/clang/test/OpenMP/simd_linear_messages.cpp
+++ b/clang/test/OpenMP/simd_linear_messages.cpp
@@ -71,7 +71,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -265,13 +265,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp simd linear(j: ref)
-#else  
+#else
   #pragma omp simd linear(ref(j)) // omp52-error {{old syntax 
'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 
'linear(list: [linear-modifier,] step(step-size))'}}
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
   #pragma omp simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step 
size' found in linear clause}}
-#else  
+#else
   #pragma omp simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git a/clang/test/OpenMP/simd_misc_messages.c 
b/clang/test/OpenMP/simd_misc_messages.c
index 745e5b965cfde..818bd9056edbc 100644
--- a/clang/test/OpenMP/simd_misc_messages.c
+++ b/clang/test/OpenMP/simd_misc_messages.c
@@ -469,7 +469,7 @@ void test_linear(void) {
   for (i = 0; i < 16; ++i)
     ;
 
-// expected-warning@+1 {{zero linear step (x and other variables in clause 
should probably be const)}}
+// expected-warning@+1 {{zero linear step ('x' and other variables in clause 
should probably be const)}}
 #pragma omp simd linear(x, y : 0)
   for (i = 0; i < 16; ++i)
     ;
diff --git a/clang/test/OpenMP/target_parallel_for_linear_messages.cpp 
b/clang/test/OpenMP/target_parallel_for_linear_messages.cpp
index 5a78cf0623f61..62aed5780c0cc 100644
--- a/clang/test/OpenMP/target_parallel_for_linear_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_for_linear_messages.cpp
@@ -92,7 +92,7 @@ T test_template(T *arr, N num) {
 template <int LEN>
 int test_warn() {
   int ind2 = 0;
-// expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
 #pragma omp target parallel for linear(ind2 : LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -291,7 +291,7 @@ int main(int argc, char **argv) {
     ++k;
 #ifdef OMP52
 #pragma omp target parallel for linear(i: step(1), step(2)) // omp52-error 
{{multiple 'step size' found in linear clause}}
-#else  
+#else
 #pragma omp target parallel for linear(i)
 #endif
   for (int k = 0; k < argc; ++k)
diff --git a/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp 
b/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
index 1da49a9a5e4c4..e4e3f9c94febe 100644
--- a/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
@@ -94,7 +94,7 @@ T test_template(T *arr, N num) {
 template <int LEN>
 int test_warn() {
   int ind2 = 0;
-// expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
 #pragma omp target parallel for simd linear(ind2 : LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -293,7 +293,7 @@ int main(int argc, char **argv) {
     ++k;
 #ifdef OMP52
 #pragma omp target parallel for simd linear(i: step(1), step(2)) // 
omp52-error {{multiple 'step size' found in linear clause}}
-#else  
+#else
 #pragma omp target parallel for simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k)
diff --git a/clang/test/OpenMP/target_simd_linear_messages.cpp 
b/clang/test/OpenMP/target_simd_linear_messages.cpp
index d39d626ea0194..c31ba0dec8c3c 100644
--- a/clang/test/OpenMP/target_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/target_simd_linear_messages.cpp
@@ -93,7 +93,7 @@ T test_template(T *arr, N num) {
 template <int LEN>
 int test_warn() {
   int ind2 = 0;
-// expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
 #pragma omp target simd linear(ind2 : LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -292,7 +292,7 @@ int main(int argc, char **argv) {
     ++k;
 #ifdef OMP52
 #pragma omp target simd linear(i: step(1), step(2)) // omp52-error {{multiple 
'step size' found in linear clause}}
-#else  
+#else
 #pragma omp target simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k)
diff --git 
a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp
 
b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp
index 7b76fa11d9592..a77c1ac6201b8 100644
--- 
a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp
+++ 
b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp
@@ -96,7 +96,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 template<int LEN> int test_warn() {
   int ind2 = 0;
 // expected-error@+1 {{only loop iteration variables are allowed in 'linear' 
clause in distribute directives}}
-  #pragma omp target teams distribute parallel for simd linear(ind2:LEN) // 
expected-warning {{zero linear step (ind2 should probably be const)}}
+  #pragma omp target teams distribute parallel for simd linear(ind2:LEN) // 
expected-warning {{zero linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
diff --git a/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp 
b/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp
index 9a875a4d544d4..dfa0f2a1e38e4 100644
--- a/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp
@@ -96,7 +96,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 template<int LEN> int test_warn() {
   int ind2 = 0;
 // expected-error@+1 {{only loop iteration variables are allowed in 'linear' 
clause in distribute directives}}
-  #pragma omp target teams distribute simd linear(ind2:LEN) // 
expected-warning {{zero linear step (ind2 should probably be const)}}
+  #pragma omp target teams distribute simd linear(ind2:LEN) // 
expected-warning {{zero linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
diff --git a/clang/test/OpenMP/task_affinity_messages.cpp 
b/clang/test/OpenMP/task_affinity_messages.cpp
index aeaa963594b30..533bc53e12744 100644
--- a/clang/test/OpenMP/task_affinity_messages.cpp
+++ b/clang/test/OpenMP/task_affinity_messages.cpp
@@ -65,7 +65,7 @@ int main(int argc, char **argv, char *env[]) {
   #pragma omp task affinity(iterator(unsigned argc: // expected-error 
{{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 
'=' in iterator specifier}} expected-error 2 {{expected expression}} 
expected-error {{expected ',' or ')' after iterator specifier}} expected-error 
{{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 
expression}}
   #pragma omp task affinity(iterator(unsigned argc = // expected-error 
{{expected ')'}} expected-note {{to match this '('}} expected-error 2 
{{expected expression}} expected-error {{expected ',' or ')' after iterator 
specifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} 
expected-error {{expected expression}}
   #pragma omp task affinity(iterator(vector argc = 0:2):argc) // 
expected-error {{expected integral or pointer type as the iterator-type, not 
'vector'}} expected-error {{expected expression}}
-  #pragma omp task affinity(iterator(vector *argc = nullptr:nullptr+2:0):argc) 
// expected-error {{invalid operands to binary expression ('std::nullptr_t' and 
'int')}} expected-error {{iterator step expression 0 evaluates to 0}} 
expected-error {{expected expression}}
+  #pragma omp task affinity(iterator(vector *argc = nullptr:nullptr+2:0):argc) 
// expected-error {{invalid operands to binary expression ('std::nullptr_t' and 
'int')}} expected-error {{iterator step expression '0' evaluates to 0}} 
expected-error {{expected expression}}
   #pragma omp task affinity(iterator(vector *argc = 0:vector():argc):argc) // 
expected-error {{converting 'vector' to incompatible type 'vector *'}} 
expected-error {{expected expression}}
   foo();
 #pragma omp task affinity(iterator(i = 0:10, i = 0:10) : argv[i]) // 
expected-error {{redefinition of 'i'}} expected-note {{previous definition is 
here}}
diff --git a/clang/test/OpenMP/task_depend_messages.cpp 
b/clang/test/OpenMP/task_depend_messages.cpp
index 3f39c55527b5d..7fc807250361e 100644
--- a/clang/test/OpenMP/task_depend_messages.cpp
+++ b/clang/test/OpenMP/task_depend_messages.cpp
@@ -78,7 +78,7 @@ int main(int argc, char **argv, char *env[]) {
   #pragma omp task depend(iterator(unsigned argc: // expected-error {{expected 
')'}} omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP 
clause 'depend'}} expected-warning {{missing ':' after dependency type - 
ignoring}} expected-note {{to match this '('}} omp50-error {{expected '=' in 
iterator specifier}} omp50-error 2 {{expected expression}} omp50-error 
{{expected ',' or ')' after iterator specifier}} omp50-error {{expected ')'}} 
omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 
'mutexinoutset' or 'depobj' in OpenMP clause 'depend'}} omp50-error {{expected 
','}} omp50-note {{to match this '('}} omp51-error {{expected '=' in iterator 
specifier}} omp51-error 2 {{expected expression}} omp51-error {{expected ',' or 
')' after iterator specifier}} omp51-error {{expected ')'}} omp51-error 
{{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset', 
'depobj' or 'inoutset' in OpenMP clause 'depend'}} omp51-error {{expected ','}} 
omp51-note {{to match this '('}}
   #pragma omp task depend(iterator(unsigned argc = // expected-error 
{{expected ')'}} omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' 
in OpenMP clause 'depend'}} expected-warning {{missing ':' after dependency 
type - ignoring}} expected-note {{to match this '('}} omp50-error 2 {{expected 
expression}} omp50-error {{expected ',' or ')' after iterator specifier}} 
omp50-error {{expected ')'}} omp50-error {{expected depend modifier(iterator) 
or 'in', 'out', 'inout', 'mutexinoutset' or 'depobj' in OpenMP clause 
'depend'}} omp50-error {{expected ','}} omp50-note {{to match this '('}} 
omp51-error 2 {{expected expression}} omp51-error {{expected ',' or ')' after 
iterator specifier}} omp51-error {{expected ')'}} omp51-error {{expected depend 
modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset', 'depobj' or 
'inoutset' in OpenMP clause 'depend'}} omp51-error {{expected ','}} omp51-note 
{{to match this '('}}
   #pragma omp task depend(iterator(vector argc = 0:2):argc) // omp45-error 
{{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} 
omp50-error {{expected integral or pointer type as the iterator-type, not 
'vector'}} omp50-error {{expected depend modifier(iterator) or 'in', 'out', 
'inout', 'mutexinoutset' or 'depobj' in OpenMP clause 'depend'}} omp50-error 
{{expected ','}} omp51-error {{expected integral or pointer type as the 
iterator-type, not 'vector'}} omp51-error {{expected depend modifier(iterator) 
or 'in', 'out', 'inout', 'mutexinoutset', 'depobj' or 'inoutset' in OpenMP 
clause 'depend'}} omp51-error {{expected ','}}
-  #pragma omp task depend(iterator(vector *argc = nullptr:nullptr+2:0), 
in:argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'depend'}} omp50-error {{invalid operands to binary expression 
('std::nullptr_t' and 'int')}} omp50-error {{iterator step expression 0 
evaluates to 0}} omp51-error {{invalid operands to binary expression 
('std::nullptr_t' and 'int')}} omp51-error {{iterator step expression 0 
evaluates to 0}}
+  #pragma omp task depend(iterator(vector *argc = nullptr:nullptr+2:0), 
in:argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in 
OpenMP clause 'depend'}} omp50-error {{invalid operands to binary expression 
('std::nullptr_t' and 'int')}} omp50-error {{iterator step expression '0' 
evaluates to 0}} omp51-error {{invalid operands to binary expression 
('std::nullptr_t' and 'int')}} omp51-error {{iterator step expression '0' 
evaluates to 0}}
   #pragma omp task depend(iterator(vector *argc = 0:vector():argc), in:argc) 
// omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP 
clause 'depend'}} omp50-error {{converting 'vector' to incompatible type 
'vector *'}} omp51-error {{converting 'vector' to incompatible type 'vector *'}}
   foo();
 #pragma omp task depend(iterator(unsigned argc = 0:10), in : argc) // 
omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 
'depend'}}
diff --git a/clang/test/OpenMP/taskloop_simd_linear_messages.cpp 
b/clang/test/OpenMP/taskloop_simd_linear_messages.cpp
index 5bf4785f14be4..3741f4e8286bd 100644
--- a/clang/test/OpenMP/taskloop_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/taskloop_simd_linear_messages.cpp
@@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N 
num) {
 
 template<int LEN> int test_warn() {
   int ind2 = 0;
-  // expected-warning@+1 {{zero linear step (ind2 should probably be const)}}
+  // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}}
   #pragma omp taskloop simd linear(ind2:LEN)
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
@@ -275,13 +275,13 @@ int main(int argc, char **argv) {
   }
 #ifdef OMP52
   #pragma omp taskloop simd linear(j: ref)
-#else  
+#else
   #pragma omp taskloop simd linear(ref(j)) // omp52-error {{old syntax 
'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 
'linear(list: [linear-modifier,] step(step-size))'}}
 #endif
   for (int k = 0; k < argc; ++k) ++k;
 #ifdef OMP52
   #pragma omp taskloop simd linear(i: step(1), step(2)) // omp52-error 
{{multiple 'step size' found in linear clause}}
-#else  
+#else
   #pragma omp taskloop simd linear(i)
 #endif
   for (int k = 0; k < argc; ++k) ++k;
diff --git 
a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp 
b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
index 8e3864ba5e2a4..193f53e52bbf1 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
@@ -100,7 +100,7 @@ template<int LEN> int test_warn() {
   int ind2 = 0;
 // expected-error@+2 {{only loop iteration variables are allowed in 'linear' 
clause in distribute directives}}
   #pragma omp target
-  #pragma omp teams distribute parallel for simd linear(ind2:LEN) // 
expected-warning {{zero linear step (ind2 should probably be const)}}
+  #pragma omp teams distribute parallel for simd linear(ind2:LEN) // 
expected-warning {{zero linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
diff --git a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp 
b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
index d6c74eb853a5d..129d88f5b3bcc 100644
--- a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
@@ -100,7 +100,7 @@ template<int LEN> int test_warn() {
   int ind2 = 0;
 // expected-error@+2 {{only loop iteration variables are allowed in 'linear' 
clause in distribute directives}}
   #pragma omp target
-  #pragma omp teams distribute simd linear(ind2:LEN) // expected-warning 
{{zero linear step (ind2 should probably be const)}}
+  #pragma omp teams distribute simd linear(ind2:LEN) // expected-warning 
{{zero linear step ('ind2' should probably be const)}}
   for (int i = 0; i < 100; i++) {
     ind2 += LEN;
   }
diff --git a/clang/test/Sema/code_align.c b/clang/test/Sema/code_align.c
index f01f51382112f..083757b578d0b 100644
--- a/clang/test/Sema/code_align.c
+++ b/clang/test/Sema/code_align.c
@@ -87,7 +87,7 @@ void foo1(int A)
   for(int I=0; I<256; ++I) { bar(I); }
 
 #ifdef __SIZEOF_INT128__
-  // expected-error@+1{{'code_align' attribute requires an integer argument 
which is a constant power of two between 1 and 4096 inclusive; provided 
argument was (__int128_t)1311768467294899680ULL << 64}}
+  // expected-error@+1{{'code_align' attribute requires an integer argument 
which is a constant power of two between 1 and 4096 inclusive; provided 
argument was '(__int128_t)1311768467294899680ULL << 64'}}
   [[clang::code_align((__int128_t)0x1234567890abcde0ULL << 64)]]
   for(int I=0; I<256; ++I) { bar(I); }
 #endif
@@ -99,7 +99,7 @@ void foo1(int A)
 #ifdef __SIZEOF_INT128__
   // cpp-local-error@+3{{expression is not an integral constant expression}}
   // cpp-local-note@+2{{left shift of negative value -1311768467294899680}}
-  // c-local-error@+1{{'code_align' attribute requires an integer argument 
which is a constant power of two between 1 and 4096 inclusive; provided 
argument was -(__int128_t)1311768467294899680ULL << 64}}
+  // c-local-error@+1{{'code_align' attribute requires an integer argument 
which is a constant power of two between 1 and 4096 inclusive; provided 
argument was '-(__int128_t)1311768467294899680ULL << 64'}}
   [[clang::code_align(-(__int128_t)0x1234567890abcde0ULL << 64)]]
   for(int I=0; I<256; ++I) { bar(I); }
 #endif
diff --git a/clang/test/Sema/warn-int-in-bool-context.c 
b/clang/test/Sema/warn-int-in-bool-context.c
index c111a5af23f57..3139017c2417d 100644
--- a/clang/test/Sema/warn-int-in-bool-context.c
+++ b/clang/test/Sema/warn-int-in-bool-context.c
@@ -25,8 +25,8 @@ enum num {
 
 int test(int a, unsigned b, enum num n) {
   boolean r;
-  r = a << a;    // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(a << a) != 0'?}}
-  r = MM;        // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(a << a) != 0'?}}
+  r = a << a;    // expected-warning {{converting the result of '<<' to a 
boolean}}
+  r = MM;        // expected-warning {{converting the result of '<<' to a 
boolean}}
   r = (1 << 7);  // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
   r = 2UL << 2;  // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
   r = 0 << a;    // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to false}}
@@ -34,23 +34,23 @@ int test(int a, unsigned b, enum num n) {
   r = 1 << 0;    // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
   r = 1 << 2;    // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
   r = 1ULL << 2; // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
-  r = 2 << b;    // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(2 << b) != 0'?}}
+  r = 2 << b;    // expected-warning {{converting the result of '<<' to a 
boolean}}
   r = (unsigned)(2 << b);
   r = b << 7;
-  r = (1 << a); // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(1 << a) != 0'?}}
-  r = TWO << a; // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(2 << a) != 0'?}}
-  r = a << 7;   // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(a << 7) != 0'?}}
-  r = ONE << a; // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(1 << a) != 0'?}}
-  if (TWO << a) // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(2 << a) != 0'?}}
+  r = (1 << a); // expected-warning {{converting the result of '<<' to a 
boolean}}
+  r = TWO << a; // expected-warning {{converting the result of '<<' to a 
boolean}}
+  r = a << 7;   // expected-warning {{converting the result of '<<' to a 
boolean}}
+  r = ONE << a; // expected-warning {{converting the result of '<<' to a 
boolean}}
+  if (TWO << a) // expected-warning {{converting the result of '<<' to a 
boolean}}
     return a;
-  
+
   a = 1 << 2 ? 0: 1; // expected-warning {{converting the result of '<<' to a 
boolean always evaluates to true}}
-  a = 1 << a ? 0: 1; // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(1 << a) != 0'?}}
+  a = 1 << a ? 0: 1; // expected-warning {{converting the result of '<<' to a 
boolean}}
 
-  for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' 
to a boolean; did you mean '(1 << a) != 0'?}}
+  for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' 
to a boolean}}
     ;
 
-  if (a << TWO) // expected-warning {{converting the result of '<<' to a 
boolean; did you mean '(a << 2) != 0'?}}
+  if (a << TWO) // expected-warning {{converting the result of '<<' to a 
boolean}}
     return a;
 
   if (n || two)
diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp 
b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
index 66a2a19ceb321..7634dbf2f6733 100644
--- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
+++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
@@ -121,13 +121,13 @@ MyLongPointerFromConversion global2;
 
 void initLocalGslPtrWithTempOwner() {
   MyIntPointer p = MyIntOwner{}; // expected-warning {{object backing the 
pointer will be destroyed at the end of the full-expression}}
-  MyIntPointer pp = p = MyIntOwner{}; // expected-warning {{object backing the 
pointer p will be}}
-  p = MyIntOwner{}; // expected-warning {{object backing the pointer p }}
+  MyIntPointer pp = p = MyIntOwner{}; // expected-warning {{object backing the 
pointer 'p' will be}}
+  p = MyIntOwner{}; // expected-warning {{object backing the pointer 'p' }}
   pp = p; // no warning
-  global = MyIntOwner{}; // expected-warning {{object backing the pointer 
global }}
+  global = MyIntOwner{}; // expected-warning {{object backing the pointer 
'global' }}
   MyLongPointerFromConversion p2 = MyLongOwnerWithConversion{}; // 
expected-warning {{object backing the pointer will be destroyed at the end of 
the full-expression}}
-  p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the 
pointer p2 }}
-  global2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing 
the pointer global2 }}
+  p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the 
pointer 'p2' }}
+  global2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing 
the pointer 'global2' }}
 }
 
 
@@ -707,7 +707,7 @@ std::string_view test1() {
   std::string_view t1 = Ref(std::string()); // expected-warning {{object 
backing}}
   t1 = Ref(std::string()); // expected-warning {{object backing}}
   return Ref(std::string()); // expected-warning {{returning address}}
-  
+
   std::string_view t2 = TakeSv(std::string()); // expected-warning {{object 
backing}}
   t2 = TakeSv(std::string()); // expected-warning {{object backing}}
   return TakeSv(std::string()); // expected-warning {{returning address}}
@@ -731,15 +731,15 @@ std::string_view test2(Foo<std::string> r1, 
Foo<std::string_view> r2) {
   std::string_view t1 = Foo<std::string>().get(); // expected-warning {{object 
backing}}
   t1 = Foo<std::string>().get(); // expected-warning {{object backing}}
   return r1.get(); // expected-warning {{address of stack}}
-  
+
   std::string_view t2 = Foo<std::string_view>().get();
   t2 = Foo<std::string_view>().get();
   return r2.get();
 
   // no warning on no-LB-annotated method.
-  std::string_view t3 = Foo<std::string>().getNoLB(); 
-  t3 = Foo<std::string>().getNoLB(); 
-  return r1.getNoLB(); 
+  std::string_view t3 = Foo<std::string>().getNoLB();
+  t3 = Foo<std::string>().getNoLB();
+  return r1.getNoLB();
 }
 
 struct Bar {};
@@ -771,7 +771,7 @@ void test4() {
   // Ideally, we would diagnose the following case, but due to implementation
   // constraints, we do not.
   const int& t4 = *MySpan<int>(std::vector<int>{}).begin();
-  
+
   auto it1 = MySpan<int>(v).begin(); // expected-warning {{temporary whose 
address is use}}
   auto it2 = ReturnFirstIt(MySpan<int>(v)); // expected-warning {{temporary 
whose address is used}}
 }
@@ -821,7 +821,7 @@ std::string_view foo(std::string_view sv 
[[clang::lifetimebound]]);
 void test1() {
   std::string_view k1 = S().sv; // OK
   std::string_view k2 = S().s; // expected-warning {{object backing the 
pointer will}}
-  
+
   std::string_view k3 = Q().get()->sv; // OK
   std::string_view k4  = Q().get()->s; // expected-warning {{object backing 
the pointer will}}
 
@@ -863,7 +863,7 @@ struct StatusOr {
 const char* foo() {
   StatusOr<std::string> s;
   return s->data(); // expected-warning {{address of stack memory associated 
with local variable}}
-  
+
   StatusOr<std::string_view> s2;
   return s2->data();
 
diff --git a/clang/test/SemaCXX/attr-lifetime-capture-by.cpp 
b/clang/test/SemaCXX/attr-lifetime-capture-by.cpp
index be1cd730ed40c..03ab425331720 100644
--- a/clang/test/SemaCXX/attr-lifetime-capture-by.cpp
+++ b/clang/test/SemaCXX/attr-lifetime-capture-by.cpp
@@ -13,12 +13,12 @@ void nonMember(
     const int &x1 [[clang::lifetime_capture_by(s, t)]],
     S &s,
     S &t,
-    const int &x2 [[clang::lifetime_capture_by(12345 + 12)]], // 
expected-error {{'lifetime_capture_by' attribute argument 12345 + 12 is not a 
known function parameter; must be a function parameter, 'this', 'global' or 
'unknown'}}
+    const int &x2 [[clang::lifetime_capture_by(12345 + 12)]], // 
expected-error {{'lifetime_capture_by' attribute argument '12345 + 12' is not a 
known function parameter; must be a function parameter, 'this', 'global' or 
'unknown'}}
     const int &x3 [[clang::lifetime_capture_by(abcdefgh)]],   // 
expected-error {{'lifetime_capture_by' attribute argument 'abcdefgh' is not a 
known function parameter; must be a function parameter, 'this', 'global' or 
'unknown'}}
-    const int &x4 [[clang::lifetime_capture_by("abcdefgh")]], // 
expected-error {{'lifetime_capture_by' attribute argument "abcdefgh" is not a 
known function parameter; must be a function parameter, 'this', 'global' or 
'unknown'}}
+    const int &x4 [[clang::lifetime_capture_by("abcdefgh")]], // 
expected-error {{'lifetime_capture_by' attribute argument '"abcdefgh"' is not a 
known function parameter; must be a function parameter, 'this', 'global' or 
'unknown'}}
     const int &x5 [[clang::lifetime_capture_by(this)]], // expected-error 
{{'lifetime_capture_by' argument references unavailable implicit 'this'}}
     const int &x6 [[clang::lifetime_capture_by()]], // expected-error 
{{'lifetime_capture_by' attribute specifies no capturing entity}}
-    const int& x7 [[clang::lifetime_capture_by(u, 
+    const int& x7 [[clang::lifetime_capture_by(u,
                                                x7)]], // expected-error 
{{'lifetime_capture_by' argument references itself}}
     const int &x8 [[clang::lifetime_capture_by(global)]],
     const int &x9 [[clang::lifetime_capture_by(unknown)]],
@@ -35,9 +35,9 @@ void global_param_name(const int& global, // expected-error 
{{parameter cannot b
                        const int& s [[clang::lifetime_capture_by(global)]]);
 struct T {
   void member(
-    const int &x [[clang::lifetime_capture_by(s)]], 
+    const int &x [[clang::lifetime_capture_by(s)]],
     S &s,
-    S &t,            
+    S &t,
     const int &y [[clang::lifetime_capture_by(s)]],
     const int &z [[clang::lifetime_capture_by(this, x, y)]],
     const int &u [[clang::lifetime_capture_by(global, unknown, x, s)]])
diff --git a/clang/test/SemaCXX/attr-lifetimebound.cpp 
b/clang/test/SemaCXX/attr-lifetimebound.cpp
index e7c8b35cb0c48..2bb88171bdfe4 100644
--- a/clang/test/SemaCXX/attr-lifetimebound.cpp
+++ b/clang/test/SemaCXX/attr-lifetimebound.cpp
@@ -69,10 +69,10 @@ namespace usage_ok {
   const int& s = crefparam(2); // expected-warning {{temporary bound to local 
reference 's' will be destroyed at the end of the full-expression}}
 
   void test_assignment() {
-    p = A().class_member(); // expected-warning {{object backing the pointer p 
will be destroyed at the end of the full-expression}}
-    p = {A().class_member()}; // expected-warning {{object backing the pointer 
p will be destroyed at the end of the full-expression}}
-    q = A(); // expected-warning {{object backing the pointer q will be 
destroyed at the end of the full-expression}}
-    r = A(1); // expected-warning {{object backing the pointer r will be 
destroyed at the end of the full-expression}}
+    p = A().class_member(); // expected-warning {{object backing the pointer 
'p' will be destroyed at the end of the full-expression}}
+    p = {A().class_member()}; // expected-warning {{object backing the pointer 
'p' will be destroyed at the end of the full-expression}}
+    q = A(); // expected-warning {{object backing the pointer 'q' will be 
destroyed at the end of the full-expression}}
+    r = A(1); // expected-warning {{object backing the pointer 'r' will be 
destroyed at the end of the full-expression}}
   }
 
   struct FieldCheck {
@@ -85,7 +85,7 @@ namespace usage_ok {
       Set c;
       int * d;
     };
-    Pair p;  
+    Pair p;
     FieldCheck(const int& a): p(a){}
     Pair& getR() [[clang::lifetimebound]] { return p; }
     Pair* getP() [[clang::lifetimebound]] { return &p; }
@@ -356,8 +356,8 @@ struct StatusOr {
 };
 
 void test(StatusOr<FooView> foo1, StatusOr<NonAnnotatedFooView> foo2) {
-  foo1 = Foo(); // expected-warning {{object backing foo1 will be destroyed at 
the end}}
+  foo1 = Foo(); // expected-warning {{object backing 'foo1' will be destroyed 
at the end}}
   // This warning is triggered by the lifetimebound annotation, regardless of 
whether the class type is annotated with GSL.
-  foo2 = NonAnnotatedFoo(); // expected-warning {{object backing foo2 will be 
destroyed at the end}}
+  foo2 = NonAnnotatedFoo(); // expected-warning {{object backing 'foo2' will 
be destroyed at the end}}
 }
 } // namespace GH106372
diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp 
b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
index 202a819655217..0e759a01375de 100644
--- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
+++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp
@@ -4,8 +4,8 @@ struct NotAPack;
 template <typename T, auto V, template<typename> typename Tp>
 void not_pack() {
     int i = 0;
-    i...[0]; // expected-error {{i does not refer to the name of a parameter 
pack}}
-    V...[0]; // expected-error {{V does not refer to the name of a parameter 
pack}}
+    i...[0]; // expected-error {{'i' does not refer to the name of a parameter 
pack}}
+    V...[0]; // expected-error {{'V' does not refer to the name of a parameter 
pack}}
     NotAPack...[0] a; // expected-error{{'NotAPack' does not refer to the name 
of a parameter pack}}
     T...[0] b;   // expected-error{{'T' does not refer to the name of a 
parameter pack}}
     Tp...[0] c; // expected-error{{'Tp' does not refer to the name of a 
parameter pack}}
@@ -42,11 +42,11 @@ int test_types() {
 
 void test() {
     params<0>();   // expected-note{{here}} \
-                   // expected-error@#error-param-size {{invalid index 0 for 
pack p of size 0}}
+                   // expected-error@#error-param-size {{invalid index 0 for 
pack 'p' of size 0}}
     params<1>(0);  // expected-note{{here}} \
-                   // expected-error@#error-param-size {{invalid index 1 for 
pack p of size 1}}
+                   // expected-error@#error-param-size {{invalid index 1 for 
pack 'p' of size 1}}
     params<-1>(0); // expected-note{{here}} \
-                   // expected-error@#error-param-size {{invalid index -1 for 
pack p of size 1}}
+                   // expected-error@#error-param-size {{invalid index -1 for 
pack 'p' of size 1}}
 
     test_types<-1>(); //expected-note {{in instantiation}} \
                       // expected-error@#error-type-size {{invalid index -1 
for pack 'T' of size 0}}
@@ -190,7 +190,7 @@ void h() {
 
   static_assert(__is_same(decltype(g<foo{}, bar{}, baz{}>(sequence<0, 2, 
1>())), W<foo{}, baz{}, bar{}>));
   g<foo{}>(sequence<4>());
-  // expected-error@#nttp-use {{invalid index 4 for pack args of size 1}}
+  // expected-error@#nttp-use {{invalid index 4 for pack 'args' of size 1}}
   // expected-note-re@-2 {{function template specialization '{{.*}}' requested 
here}}
 }
 }
@@ -214,7 +214,7 @@ void f( ) {
   test(1);
   test2<1>();
   test2();
-  // expected-error@#test2-R {{invalid index 0 for pack args of size 0}}
+  // expected-error@#test2-R {{invalid index 0 for pack 'args' of size 0}}
   // expected-note@#test2-call {{requested here}}
   // expected-note@-3 {{requested here}}
 }
diff --git a/clang/test/SemaCXX/warn-dangling-local.cpp 
b/clang/test/SemaCXX/warn-dangling-local.cpp
index 5ad5013b6f025..81f6d9aba5fe4 100644
--- a/clang/test/SemaCXX/warn-dangling-local.cpp
+++ b/clang/test/SemaCXX/warn-dangling-local.cpp
@@ -4,10 +4,10 @@ using T = int[];
 
 void f() {
   int *p = &(int&)(int&&)0; // expected-warning {{temporary whose address is 
used as value of local variable 'p' will be destroyed at the end of the 
full-expression}}
-  p =  &(int&)(int&&)0; // expected-warning {{object backing the pointer p 
will be destroyed at the end of the full-expression}}
+  p =  &(int&)(int&&)0; // expected-warning {{object backing the pointer 'p' 
will be destroyed at the end of the full-expression}}
 
   int *q = (int *const &)T{1, 2, 3}; // expected-warning {{temporary whose 
address is used as value of local variable 'q' will be destroyed at the end of 
the full-expression}}
-  q = (int *const &)T{1, 2, 3}; // expected-warning {{object backing the 
pointer q will be destroyed at the end of the full-expression}}
+  q = (int *const &)T{1, 2, 3}; // expected-warning {{object backing the 
pointer 'q' will be destroyed at the end of the full-expression}}
 
   // FIXME: We don't warn here because the 'int*' temporary is not const, but
   // it also can't have actually changed since it was created, so we could
@@ -35,5 +35,5 @@ struct basic_string {
 }  // namespace std
 void test(const char* a) {
   // verify we're emitting the `-Wdangling-assignment-gsl` warning.
-  a = std::basic_string().c_str(); // expected-warning {{object backing the 
pointer a will be destroyed at the end of the full-expression}}
+  a = std::basic_string().c_str(); // expected-warning {{object backing the 
pointer 'a' will be destroyed at the end of the full-expression}}
 }
diff --git a/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl 
b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl
index 4adb0555c35be..9d0c206a3b3ad 100644
--- a/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl
+++ b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl
@@ -32,24 +32,24 @@ void test_asuint_first_arg_const(double D) {
   const uint A = 0;
   uint B;
   asuint(D, A, B);
- // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not 
assignable}} 
+ // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not 
assignable}}
 }
 
 void test_asuint_second_arg_const(double D) {
   const uint A = 0;
   uint B;
   asuint(D, B, A);
- // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not 
assignable}} 
+ // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not 
assignable}}
 }
 
 void test_asuint_imidiate_value(double D) {
   uint B;
   asuint(D, B, 1);
- // expected-error@-1 {{cannot bind non-lvalue argument 1 to out paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument '1' to out paramemter}}
 }
 
 void test_asuint_expr(double D) {
   uint B;
   asuint(D, B, B + 1);
- // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out 
paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out 
paramemter}}
 }
diff --git a/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl 
b/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl
index 7000affaef77f..12c818acec035 100644
--- a/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl
+++ b/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl
@@ -61,5 +61,5 @@ int2 test_select_builtin_second_arg_not_vector(bool2 p0, int2 
t0, int f0) {
 
 // if vector last 2 aren't same type (so both are vectors but wrong type)
 int1 test_select_builtin_diff_types(bool1 p0, int1 t0, float1 f0) {
-  return __builtin_hlsl_select(p0, t0, f0); // expected-error{{second and 
third arguments to __builtin_hlsl_select must be of scalar or vector type with 
matching scalar element type: 'vector<int, [...]>' vs 'vector<float, [...]>'}}
+  return __builtin_hlsl_select(p0, t0, f0); // expected-error{{second and 
third arguments to '__builtin_hlsl_select' must be of scalar or vector type 
with matching scalar element type: 'vector<int, [...]>' vs 'vector<float, 
[...]>'}}
 }
diff --git a/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl 
b/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl
index 18d2b692b335b..312230a2d6aff 100644
--- a/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl
+++ b/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl
@@ -2,75 +2,75 @@
 
 void test_no_second_arg(double D) {
   __builtin_hlsl_elementwise_splitdouble(D);
- // expected-error@-1 {{too few arguments to function call, expected 3, have 
1}} 
+ // expected-error@-1 {{too few arguments to function call, expected 3, have 
1}}
 }
 
 void test_no_third_arg(double D) {
   uint A;
   __builtin_hlsl_elementwise_splitdouble(D, A);
- // expected-error@-1 {{too few arguments to function call, expected 3, have 
2}} 
+ // expected-error@-1 {{too few arguments to function call, expected 3, have 
2}}
 }
 
 void test_too_many_arg(double D) {
   uint A, B, C;
   __builtin_hlsl_elementwise_splitdouble(D, A, B, C);
- // expected-error@-1 {{too many arguments to function call, expected 3, have 
4}} 
+ // expected-error@-1 {{too many arguments to function call, expected 3, have 
4}}
 }
 
 void test_first_arg_type_mismatch(bool3 D) {
   uint3 A, B;
   __builtin_hlsl_elementwise_splitdouble(D, A, B);
- // expected-error@-1 {{invalid operand of type 'bool3' (aka 'vector<bool, 
3>') where 'double' or a vector of such type is required}} 
+ // expected-error@-1 {{invalid operand of type 'bool3' (aka 'vector<bool, 
3>') where 'double' or a vector of such type is required}}
 }
 
 void test_second_arg_type_mismatch(double D) {
   bool A;
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, A, B);
- // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or 
a vector of such type is required}} 
+ // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or 
a vector of such type is required}}
 }
 
 void test_third_arg_type_mismatch(double D) {
   bool A;
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, B, A);
- // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or 
a vector of such type is required}} 
+ // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or 
a vector of such type is required}}
 }
 
 void test_const_second_arg(double D) {
   const uint A = 1;
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, A, B);
- // expected-error@-1 {{cannot bind non-lvalue argument A to out paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument 'A' to out paramemter}}
 }
 
 void test_const_third_arg(double D) {
   uint A;
   const uint B = 1;
   __builtin_hlsl_elementwise_splitdouble(D, A, B);
- // expected-error@-1 {{cannot bind non-lvalue argument B to out paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument 'B' to out paramemter}}
 }
 
 void test_number_second_arg(double D) {
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, (uint)1, B);
- // expected-error@-1 {{cannot bind non-lvalue argument (uint)1 to out 
paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument '(uint)1' to out 
paramemter}}
 }
 
 void test_number_third_arg(double D) {
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, B, (uint)1);
- // expected-error@-1 {{cannot bind non-lvalue argument (uint)1 to out 
paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument '(uint)1' to out 
paramemter}}
 }
 
 void test_expr_second_arg(double D) {
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, B+1, B);
- // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out 
paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out 
paramemter}}
 }
 
 void test_expr_third_arg(double D) {
   uint B;
   __builtin_hlsl_elementwise_splitdouble(D, B, B+1);
- // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out 
paramemter}} 
+ // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out 
paramemter}}
 }
diff --git a/clang/test/SemaHLSL/Language/OutputParameters.hlsl 
b/clang/test/SemaHLSL/Language/OutputParameters.hlsl
index 6d4d59771f8e4..e4d370e4ba4a0 100644
--- a/clang/test/SemaHLSL/Language/OutputParameters.hlsl
+++ b/clang/test/SemaHLSL/Language/OutputParameters.hlsl
@@ -10,11 +10,11 @@ void InOutVecFn(inout float3) {}
 void case1() {
   float f;
   int i;
-  OutVecFn(f); // expected-error{{illegal scalar extension cast on argument f 
to out paramemter}}
-  InOutVecFn(f); // expected-error{{illegal scalar extension cast on argument 
f to inout paramemter}}
+  OutVecFn(f); // expected-error{{illegal scalar extension cast on argument 
'f' to out paramemter}}
+  InOutVecFn(f); // expected-error{{illegal scalar extension cast on argument 
'f' to inout paramemter}}
 
-  OutVecFn(i); // expected-error{{illegal scalar extension cast on argument i 
to out paramemter}}
-  InOutVecFn(i); // expected-error{{illegal scalar extension cast on argument 
i to inout paramemter}}
+  OutVecFn(i); // expected-error{{illegal scalar extension cast on argument 
'i' to out paramemter}}
+  InOutVecFn(i); // expected-error{{illegal scalar extension cast on argument 
'i' to inout paramemter}}
 }
 
 // Case 2: Conversion warnings on argument initialization. Clang generates
diff --git a/clang/test/SemaHLSL/parameter_modifiers.hlsl 
b/clang/test/SemaHLSL/parameter_modifiers.hlsl
index 5c4a1e4ec2926..68b3d5ac2de5e 100644
--- a/clang/test/SemaHLSL/parameter_modifiers.hlsl
+++ b/clang/test/SemaHLSL/parameter_modifiers.hlsl
@@ -48,8 +48,8 @@ void callFns() {
   // Call with literal arguments.
   implicitFn(1); // Ok.
   inFn(1); // Ok.
-  inoutFn(1); // expected-error{{cannot bind non-lvalue argument 1 to inout 
paramemter}}
-  outFn(1); // expected-error{{cannot bind non-lvalue argument 1 to out 
paramemter}}
+  inoutFn(1); // expected-error{{cannot bind non-lvalue argument '1' to inout 
paramemter}}
+  outFn(1); // expected-error{{cannot bind non-lvalue argument '1' to out 
paramemter}}
 
   // Call with variables.
   float f;
diff --git a/clang/test/SemaOpenCL/to_addr_builtin.cl 
b/clang/test/SemaOpenCL/to_addr_builtin.cl
index 5cd74885aa9df..51721a6434518 100644
--- a/clang/test/SemaOpenCL/to_addr_builtin.cl
+++ b/clang/test/SemaOpenCL/to_addr_builtin.cl
@@ -24,21 +24,21 @@ void test(void) {
 #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= 
CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space))
   // expected-error@-2{{use of undeclared identifier 'to_global'}}
 #else
-  // expected-error@-4{{invalid argument x to function: 'to_global', expecting 
a generic pointer argument}}
+  // expected-error@-4{{invalid argument 'x' to function: 'to_global', 
expecting a generic pointer argument}}
 #endif
 
   glob = to_global(con);
 #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= 
CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space))
   // expected-error@-2{{use of undeclared identifier 'to_global'}}
 #else
-  // expected-error@-4{{invalid argument con to function: 'to_global', 
expecting a generic pointer argument}}
+  // expected-error@-4{{invalid argument 'con' to function: 'to_global', 
expecting a generic pointer argument}}
 #endif
 
   glob = to_global(con_typedef);
 #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= 
CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space))
   // expected-error@-2{{use of undeclared identifier 'to_global'}}
 #else
-  // expected-error@-4{{invalid argument con_typedef to function: 'to_global', 
expecting a generic pointer argument}}
+  // expected-error@-4{{invalid argument 'con_typedef' to function: 
'to_global', expecting a generic pointer argument}}
 #endif
 
   loc = to_global(glob);
diff --git a/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp 
b/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp
index cb309fb2e19e9..e72288801a830 100644
--- a/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp
+++ b/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp
@@ -420,6 +420,7 @@ enum ModifierType {
   MT_Q,
   MT_ObjCClass,
   MT_ObjCInstance,
+  MT_Quoted,
 };
 
 static StringRef getModifierName(ModifierType MT) {
@@ -447,6 +448,8 @@ static StringRef getModifierName(ModifierType MT) {
     return "objcclass";
   case MT_ObjCInstance:
     return "objcinstance";
+  case MT_Quoted:
+    return "quoted";
   case MT_Unknown:
     llvm_unreachable("invalid modifier type");
   }
@@ -1113,6 +1116,7 @@ Piece 
*DiagnosticTextBuilder::DiagText::parseDiagText(StringRef &Text,
                                .Case("q", MT_Q)
                                .Case("objcclass", MT_ObjCClass)
                                .Case("objcinstance", MT_ObjCInstance)
+                               .Case("quoted", MT_Quoted)
                                .Case("", MT_Placeholder)
                                .Default(MT_Unknown);
 
@@ -1264,6 +1268,7 @@ Piece 
*DiagnosticTextBuilder::DiagText::parseDiagText(StringRef &Text,
     case MT_Placeholder:
     case MT_ObjCClass:
     case MT_ObjCInstance:
+    case MT_Quoted:
     case MT_Ordinal:
     case MT_Human: {
       Parsed.push_back(New<PlaceholderPiece>(ModType, parseModifier(Text)));

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to