[clang] fceb9ce - [clang] consistently quote expressions in diagnostics (#134769)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 15 00:18:27 PDT 2025
Author: Matheus Izvekov
Date: 2025-04-15T04:18:23-03:00
New Revision: fceb9cecdf6264eb773ee826b72a51a9ec68ec74
URL: https://github.com/llvm/llvm-project/commit/fceb9cecdf6264eb773ee826b72a51a9ec68ec74
DIFF: https://github.com/llvm/llvm-project/commit/fceb9cecdf6264eb773ee826b72a51a9ec68ec74.diff
LOG: [clang] consistently quote expressions in diagnostics (#134769)
Added:
clang/test/FixIt/fixit-bool.cpp
Modified:
clang/docs/InternalsManual.rst
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/DiagnosticASTKinds.td
clang/include/clang/Basic/DiagnosticParseKinds.td
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/AST/ASTDiagnostic.cpp
clang/lib/Basic/Diagnostic.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/AST/ByteCode/literals.cpp
clang/test/C/C11/n1285.c
clang/test/CodeGenCXX/sections.cpp
clang/test/Modules/odr_hash.cpp
clang/test/OpenMP/declare_variant_messages.c
clang/test/OpenMP/declare_variant_messages.cpp
clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/distribute_simd_linear_messages.cpp
clang/test/OpenMP/for_linear_messages.cpp
clang/test/OpenMP/for_simd_linear_messages.cpp
clang/test/OpenMP/for_simd_misc_messages.c
clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp
clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp
clang/test/OpenMP/parallel_for_linear_messages.cpp
clang/test/OpenMP/parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/parallel_for_simd_misc_messages.c
clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp
clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp
clang/test/OpenMP/simd_linear_messages.cpp
clang/test/OpenMP/simd_misc_messages.c
clang/test/OpenMP/target_parallel_for_linear_messages.cpp
clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/target_simd_linear_messages.cpp
clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp
clang/test/OpenMP/task_affinity_messages.cpp
clang/test/OpenMP/task_depend_messages.cpp
clang/test/OpenMP/taskloop_simd_linear_messages.cpp
clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp
clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp
clang/test/Sema/code_align.c
clang/test/Sema/warn-int-in-bool-context.c
clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
clang/test/SemaCXX/attr-lifetime-capture-by.cpp
clang/test/SemaCXX/attr-lifetimebound.cpp
clang/test/SemaCXX/cxx2c-pack-indexing.cpp
clang/test/SemaCXX/warn-dangling-local.cpp
clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl
clang/test/SemaHLSL/BuiltIns/select-errors.hlsl
clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl
clang/test/SemaHLSL/Language/OutputParameters.hlsl
clang/test/SemaHLSL/parameter_modifiers.hlsl
clang/test/SemaOpenCL/to_addr_builtin.cl
clang/utils/TableGen/ClangDiagnosticsEmitter.cpp
Removed:
################################################################################
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 d551de0d4aabd..97de736c4bad3 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 at second.h:* {{'FunctionTemplate::S17' has
diff erent definitions in
diff erent modules; first
diff erence is definition in module 'SecondModule' found function template 'foo' with 1st template parameter with default argument 1 + 1}}
-// expected-note at first.h:* {{but in 'FirstModule' found function template 'foo' with 1st template parameter with default argument 2}}
+// expected-error at second.h:* {{'FunctionTemplate::S17' has
diff erent definitions in
diff erent modules; first
diff erence is definition in module 'SecondModule' found function template 'foo' with 1st template parameter with default argument '1 + 1'}}
+// expected-note at 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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (x and other variables in clause should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (x and other variables in clause should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +1 {{zero linear step (x and other variables in clause should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+// expected-warning at +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 at +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 at +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 at +1 {{zero linear step (ind2 should probably be const)}}
+ // expected-warning at +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 at +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 at +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 at +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 at +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 at +3{{expression is not an integral constant expression}}
// cpp-local-note at +2{{left shift of negative value -1311768467294899680}}
- // c-local-error at +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 at +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 at -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 at -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 at hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}}
+ // expected-error at 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 at hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}}
+ // expected-error at 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 at -1 {{cannot bind non-lvalue argument 1 to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument B + 1 to out paramemter}}
+ // expected-error at -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 at -1 {{too few arguments to function call, expected 3, have 1}}
+ // expected-error at -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 at -1 {{too few arguments to function call, expected 3, have 2}}
+ // expected-error at -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 at -1 {{too many arguments to function call, expected 3, have 4}}
+ // expected-error at -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 at -1 {{invalid operand of type 'bool3' (aka 'vector<bool, 3>') where 'double' or a vector of such type is required}}
+ // expected-error at -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 at -1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}}
+ // expected-error at -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 at -1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument A to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument B to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument (uint)1 to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument (uint)1 to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument B + 1 to out paramemter}}
+ // expected-error at -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 at -1 {{cannot bind non-lvalue argument B + 1 to out paramemter}}
+ // expected-error at -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 at -2{{use of undeclared identifier 'to_global'}}
#else
- // expected-error at -4{{invalid argument x to function: 'to_global', expecting a generic pointer argument}}
+ // expected-error at -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 at -2{{use of undeclared identifier 'to_global'}}
#else
- // expected-error at -4{{invalid argument con to function: 'to_global', expecting a generic pointer argument}}
+ // expected-error at -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 at -2{{use of undeclared identifier 'to_global'}}
#else
- // expected-error at -4{{invalid argument con_typedef to function: 'to_global', expecting a generic pointer argument}}
+ // expected-error at -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)));
More information about the cfe-commits
mailing list