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@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@first.h:* {{but in 'FirstModule' found function template 'foo' with 1st template parameter with default argument 2}} +// expected-error@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@first.h:* {{but in 'FirstModule' found function template 'foo' with 1st template parameter with default argument '2'}} #endif #if defined(FIRST) diff --git a/clang/test/OpenMP/declare_variant_messages.c b/clang/test/OpenMP/declare_variant_messages.c index 14637d8200671..32e365cc415bd 100644 --- a/clang/test/OpenMP/declare_variant_messages.c +++ b/clang/test/OpenMP/declare_variant_messages.c @@ -34,7 +34,7 @@ int foo(void); #pragma omp declare variant(foo) match(implementation={vendor(score ibm)}) // expected-error {{expected '(' after 'score'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} #pragma omp declare variant(foo) match(implementation={vendor(score( ibm)}) // expected-error {{use of undeclared identifier 'ibm'}} expected-error {{expected ')'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}} #pragma omp declare variant(foo) match(implementation={vendor(score(2 ibm)}) // expected-error {{expected ')'}} expected-error {{expected ')'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{to match this '('}} expected-note {{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}} -#pragma omp declare variant(foo) match(implementation={vendor(score(foo()) ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation={vendor(score(foo()) ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo()' is not and will be ignored}} #pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm), vendor(llvm)}) // expected-warning {{the context selector 'vendor' was used already in the same 'omp declare variant' directive; selector ignored}} expected-note {{the previous context selector 'vendor' used here}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foo) match(implementation={vendor(score(5): ibm), kind(cpu)}) // expected-warning {{the context selector 'kind' is not valid for the context set 'implementation'; selector ignored}} expected-note {{the context selector 'kind' can be nested in the context set 'device'; try 'match(device={kind(property)})'}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foo) match(device={xxx}) // expected-warning {{'xxx' is not a valid context selector for the context set 'device'; selector ignored}} expected-note {{context selector options are: 'kind' 'arch' 'isa'}} expected-note {{the ignored selector spans until here}} @@ -53,18 +53,18 @@ int foo(void); #pragma omp declare variant(foo) match(target_device={kind}) // expected-warning {{the context selector 'kind' in context set 'target_device' requires a context property defined in parentheses; selector ignored}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foo) match(target_device={kind(}) // expected-error {{expected ')'}} expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{context property options are: 'host' 'nohost' 'cpu' 'gpu' 'fpga' 'any'}} expected-note {{to match this '('}} #pragma omp declare variant(foo) match(target_device={kind()}) // expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{context property options are: 'host' 'nohost' 'cpu' 'gpu' 'fpga' 'any'}} -#pragma omp declare variant(foo) match(target_device={device_num}) // expected-warning {{the context selector 'device_num' in context set 'target_device' requires a context property defined in parentheses; selector ignored}} expected-note {{the ignored selector spans until here}} +#pragma omp declare variant(foo) match(target_device={device_num}) // expected-warning {{the context selector 'device_num' in context set 'target_device' requires a context property defined in parentheses; selector ignored}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foo) match(target_device={device_num()}) // expected-error {{expected expression}} #pragma omp declare variant(foo) match(target_device={device_num(-1)}) // expected-error {{argument to 'device_num' clause must be a non-negative integer value}} #pragma omp declare variant(foo) match(target_device={device_num(abc)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'abc'}} int bar(void); -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo is not and will be ignored}} -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo' is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo()' is not and will be ignored}} #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) :llvm)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'expr'}} expected-error {{expected expression}} -#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo is not}} -#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo() is not}} +#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo' is not}} +#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo()' is not}} #pragma omp declare variant(foo) match(user = {condition(<expr>)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'expr'}} expected-error {{expected expression}} expected-note {{the ignored selector spans until here}} int score_and_cond_non_const(void); diff --git a/clang/test/OpenMP/declare_variant_messages.cpp b/clang/test/OpenMP/declare_variant_messages.cpp index 2d6e5bfc1f2f2..8eb37bc64cbc1 100644 --- a/clang/test/OpenMP/declare_variant_messages.cpp +++ b/clang/test/OpenMP/declare_variant_messages.cpp @@ -39,7 +39,7 @@ T foofoo(); #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score ibm)}) // expected-error {{expected '(' after 'score'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score( ibm)}) // expected-error {{use of undeclared identifier 'ibm'}} expected-error {{expected ')'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}} #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(2 ibm)}) // expected-error {{expected ')'}} expected-error {{expected ')'}} expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{expected identifier or string literal describing a context property; property skipped}} expected-note {{to match this '('}} expected-note {{context property options are: 'amd' 'arm' 'bsc' 'cray' 'fujitsu' 'gnu' 'ibm' 'intel' 'llvm' 'nec' 'nvidia' 'pgi' 'ti' 'unknown'}} expected-note {{to match this '('}} -#pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(foofoo <int>()) ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{score expressions in the OpenMP context selector need to be constant; foofoo<int>() is not and will be ignored}} +#pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(foofoo <int>()) ibm)}) // expected-warning {{expected '':'' after the score expression; '':'' assumed}} expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foofoo<int>()' is not and will be ignored}} #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(5): ibm), vendor(llvm)}) // expected-warning {{the context selector 'vendor' was used already in the same 'omp declare variant' directive; selector ignored}} expected-note {{the previous context selector 'vendor' used here}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foofoo <int>) match(implementation={vendor(score(5): ibm), kind(cpu)}) // expected-warning {{the context selector 'kind' is not valid for the context set 'implementation'; selector ignored}} expected-note {{the context selector 'kind' can be nested in the context set 'device'; try 'match(device={kind(property)})'}} expected-note {{the ignored selector spans until here}} #pragma omp declare variant(foofoo <int>) match(device={xxx}) // expected-warning {{'xxx' is not a valid context selector for the context set 'device'; selector ignored}} expected-note {{context selector options are: 'kind' 'arch' 'isa'}} expected-note {{the ignored selector spans until here}} @@ -95,11 +95,11 @@ int bar(); template <typename T, int C> T barbar(); -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo is not and will be ignored}} -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo' is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo()' is not and will be ignored}} #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) :llvm)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'expr'}} expected-error {{expected expression}} -#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo is not}} -#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo() is not}} +#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo' is not}} +#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo()' is not}} #pragma omp declare variant(foo) match(user = {condition(<expr>)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'expr'}} expected-error {{expected expression}} expected-note {{the ignored selector spans until here}} int score_and_cond_non_const(); @@ -112,11 +112,11 @@ int score_and_cond_non_const(); template<int C> int score_and_cond_non_const_no_inst(); -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo is not and will be ignored}} -#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo' is not and will be ignored}} +#pragma omp declare variant(foo) match(implementation = {vendor(score(foo()) :llvm)}) // expected-warning {{score expressions in the OpenMP context selector need to be constant; 'foo()' is not and will be ignored}} #pragma omp declare variant(foo) match(implementation = {vendor(score(<expr>) :llvm)}) // expected-error {{expected expression}} expected-error {{use of undeclared identifier 'expr'}} expected-error {{expected expression}} -#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo is not}} -#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; foo() is not}} +#pragma omp declare variant(foo) match(user = {condition(foo)}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo' is not}} +#pragma omp declare variant(foo) match(user = {condition(foo())}) // expected-error {{the user condition in the OpenMP context selector needs to be constant; 'foo()' is not}} #pragma omp declare variant(foo) match(user = {condition(<C>)}) // expected-error {{expected expression}} expected-error {{expected expression}} expected-note {{the ignored selector spans until here}} template<int C> int score_and_cond_non_const_inst(); diff --git a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp index be05533d43f9b..08d745f3b1a07 100644 --- a/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp @@ -111,7 +111,7 @@ template<int LEN> int test_warn() { int ind2 = 0; #pragma omp target #pragma omp teams - #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } @@ -355,7 +355,7 @@ int main(int argc, char **argv) { for (i = 0; i < argc; ++i) ++i; #pragma omp target #pragma omp teams - #pragma omp distribute parallel for simd linear(i: pval) // omp52-error {{use of undeclared identifier 'pval'}} + #pragma omp distribute parallel for simd linear(i: pval) // omp52-error {{use of undeclared identifier 'pval'}} for (i = 0; i < argc; ++i) ++i; #pragma omp target #pragma omp teams diff --git a/clang/test/OpenMP/distribute_simd_linear_messages.cpp b/clang/test/OpenMP/distribute_simd_linear_messages.cpp index a56fd636b6f1a..64bcdb4812979 100644 --- a/clang/test/OpenMP/distribute_simd_linear_messages.cpp +++ b/clang/test/OpenMP/distribute_simd_linear_messages.cpp @@ -111,7 +111,7 @@ template<int LEN> int test_warn() { int ind2 = 0; #pragma omp target #pragma omp teams - #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } diff --git a/clang/test/OpenMP/for_linear_messages.cpp b/clang/test/OpenMP/for_linear_messages.cpp index 6253a3032c0e3..2e10230630adb 100644 --- a/clang/test/OpenMP/for_linear_messages.cpp +++ b/clang/test/OpenMP/for_linear_messages.cpp @@ -74,7 +74,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp for linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; diff --git a/clang/test/OpenMP/for_simd_linear_messages.cpp b/clang/test/OpenMP/for_simd_linear_messages.cpp index a760675dcf34c..30c6f7274b5da 100644 --- a/clang/test/OpenMP/for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/for_simd_linear_messages.cpp @@ -72,7 +72,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp for simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -228,7 +228,7 @@ int main(int argc, char **argv) { #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 - #pragma omp for simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} + #pragma omp for simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} #else #pragma omp for simd linear(i) #endif @@ -236,7 +236,7 @@ int main(int argc, char **argv) { #ifdef OMP52 #pragma omp for simd linear(j: step()) // omp52-error 2 {{expected expression}} for (int k = 0; k < argc; ++k) ++k; - #pragma omp for simd linear(j: pval) // omp52-error {{use of undeclared identifier 'pval'}} + #pragma omp for simd linear(j: pval) // omp52-error {{use of undeclared identifier 'pval'}} for (int k = 0; k < argc; ++k) ++k; #pragma omp for simd linear(i: val, step(2 // omp52-error 3 {{expected ')'}} omp52-note 2 {{to match this '('}} for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/for_simd_misc_messages.c b/clang/test/OpenMP/for_simd_misc_messages.c index 700991014b765..5803d933af108 100644 --- a/clang/test/OpenMP/for_simd_misc_messages.c +++ b/clang/test/OpenMP/for_simd_misc_messages.c @@ -481,7 +481,7 @@ void test_linear(void) { for (i = 0; i < 16; ++i) ; -// expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} +// expected-warning@+1 {{zero linear step ('x' and other variables in clause should probably be const)}} #pragma omp for simd linear(x, y : 0) for (i = 0; i < 16; ++i) ; diff --git a/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp b/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp index 6072ad1b92445..f67af47fc1dfb 100644 --- a/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp +++ b/clang/test/OpenMP/masked_taskloop_simd_linear_messages.cpp @@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp masked taskloop simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -274,13 +274,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp masked taskloop simd linear(j: ref) -#else +#else #pragma omp masked taskloop simd linear(ref(j)) #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 #pragma omp masked taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp masked taskloop simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp b/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp index c1bf61b8183ec..555c81c34c703 100644 --- a/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp +++ b/clang/test/OpenMP/master_taskloop_simd_linear_messages.cpp @@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp master taskloop simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -275,13 +275,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp master taskloop simd linear(j: ref) -#else +#else #pragma omp master taskloop simd linear(ref(j)) // omp52-error {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}} #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 #pragma omp master taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp master taskloop simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/parallel_for_linear_messages.cpp b/clang/test/OpenMP/parallel_for_linear_messages.cpp index 4e863de79fe0e..ba80c8e1ce689 100644 --- a/clang/test/OpenMP/parallel_for_linear_messages.cpp +++ b/clang/test/OpenMP/parallel_for_linear_messages.cpp @@ -83,7 +83,7 @@ T test_template(T *arr, N num) { template <int LEN> int test_warn() { int ind2 = 0; -// expected-warning@+1 {{zero linear step (ind2 should probably be const)}} +// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp parallel for linear(ind2 : LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; diff --git a/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp index ab682e29cd93c..7d540bcac8640 100644 --- a/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/parallel_for_simd_linear_messages.cpp @@ -71,7 +71,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp parallel for simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; diff --git a/clang/test/OpenMP/parallel_for_simd_misc_messages.c b/clang/test/OpenMP/parallel_for_simd_misc_messages.c index 4cb37ba27107b..7d383d32e84d1 100644 --- a/clang/test/OpenMP/parallel_for_simd_misc_messages.c +++ b/clang/test/OpenMP/parallel_for_simd_misc_messages.c @@ -472,7 +472,7 @@ void test_linear(void) { for (i = 0; i < 16; ++i) ; -// expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} +// expected-warning@+1 {{zero linear step ('x' and other variables in clause should probably be const)}} #pragma omp parallel for simd linear(x, y : 0) for (i = 0; i < 16; ++i) ; diff --git a/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp b/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp index bda3ef09181a6..a3befd481aa90 100644 --- a/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp +++ b/clang/test/OpenMP/parallel_masked_taskloop_simd_linear_messages.cpp @@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp parallel masked taskloop simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -275,13 +275,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp parallel masked taskloop simd linear(j: ref) -#else +#else #pragma omp parallel masked taskloop simd linear(ref(j)) // omp52-error {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}} #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 - #pragma omp parallel masked taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else + #pragma omp parallel masked taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} +#else #pragma omp parallel masked taskloop simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp b/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp index 01a734cd927e2..b406f36df167b 100644 --- a/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp +++ b/clang/test/OpenMP/parallel_master_taskloop_simd_linear_messages.cpp @@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp parallel master taskloop simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -275,13 +275,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp parallel master taskloop simd linear(j: ref) -#else +#else #pragma omp parallel master taskloop simd linear(ref(j)) // omp52-error {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}} #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 #pragma omp parallel master taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp parallel master taskloop simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/simd_linear_messages.cpp b/clang/test/OpenMP/simd_linear_messages.cpp index 68a2999fdf65a..3ce4de697de0c 100644 --- a/clang/test/OpenMP/simd_linear_messages.cpp +++ b/clang/test/OpenMP/simd_linear_messages.cpp @@ -71,7 +71,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -265,13 +265,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp simd linear(j: ref) -#else +#else #pragma omp simd linear(ref(j)) // omp52-error {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}} #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 #pragma omp simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/simd_misc_messages.c b/clang/test/OpenMP/simd_misc_messages.c index 745e5b965cfde..818bd9056edbc 100644 --- a/clang/test/OpenMP/simd_misc_messages.c +++ b/clang/test/OpenMP/simd_misc_messages.c @@ -469,7 +469,7 @@ void test_linear(void) { for (i = 0; i < 16; ++i) ; -// expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} +// expected-warning@+1 {{zero linear step ('x' and other variables in clause should probably be const)}} #pragma omp simd linear(x, y : 0) for (i = 0; i < 16; ++i) ; diff --git a/clang/test/OpenMP/target_parallel_for_linear_messages.cpp b/clang/test/OpenMP/target_parallel_for_linear_messages.cpp index 5a78cf0623f61..62aed5780c0cc 100644 --- a/clang/test/OpenMP/target_parallel_for_linear_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_linear_messages.cpp @@ -92,7 +92,7 @@ T test_template(T *arr, N num) { template <int LEN> int test_warn() { int ind2 = 0; -// expected-warning@+1 {{zero linear step (ind2 should probably be const)}} +// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp target parallel for linear(ind2 : LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -291,7 +291,7 @@ int main(int argc, char **argv) { ++k; #ifdef OMP52 #pragma omp target parallel for linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp target parallel for linear(i) #endif for (int k = 0; k < argc; ++k) diff --git a/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp index 1da49a9a5e4c4..e4e3f9c94febe 100644 --- a/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/target_parallel_for_simd_linear_messages.cpp @@ -94,7 +94,7 @@ T test_template(T *arr, N num) { template <int LEN> int test_warn() { int ind2 = 0; -// expected-warning@+1 {{zero linear step (ind2 should probably be const)}} +// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp target parallel for simd linear(ind2 : LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -293,7 +293,7 @@ int main(int argc, char **argv) { ++k; #ifdef OMP52 #pragma omp target parallel for simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp target parallel for simd linear(i) #endif for (int k = 0; k < argc; ++k) diff --git a/clang/test/OpenMP/target_simd_linear_messages.cpp b/clang/test/OpenMP/target_simd_linear_messages.cpp index d39d626ea0194..c31ba0dec8c3c 100644 --- a/clang/test/OpenMP/target_simd_linear_messages.cpp +++ b/clang/test/OpenMP/target_simd_linear_messages.cpp @@ -93,7 +93,7 @@ T test_template(T *arr, N num) { template <int LEN> int test_warn() { int ind2 = 0; -// expected-warning@+1 {{zero linear step (ind2 should probably be const)}} +// expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp target simd linear(ind2 : LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -292,7 +292,7 @@ int main(int argc, char **argv) { ++k; #ifdef OMP52 #pragma omp target simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp target simd linear(i) #endif for (int k = 0; k < argc; ++k) diff --git a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp index 7b76fa11d9592..a77c1ac6201b8 100644 --- a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_linear_messages.cpp @@ -96,7 +96,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; // expected-error@+1 {{only loop iteration variables are allowed in 'linear' clause in distribute directives}} - #pragma omp target teams distribute parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp target teams distribute parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } diff --git a/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp b/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp index 9a875a4d544d4..dfa0f2a1e38e4 100644 --- a/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp +++ b/clang/test/OpenMP/target_teams_distribute_simd_linear_messages.cpp @@ -96,7 +96,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; // expected-error@+1 {{only loop iteration variables are allowed in 'linear' clause in distribute directives}} - #pragma omp target teams distribute simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp target teams distribute simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } diff --git a/clang/test/OpenMP/task_affinity_messages.cpp b/clang/test/OpenMP/task_affinity_messages.cpp index aeaa963594b30..533bc53e12744 100644 --- a/clang/test/OpenMP/task_affinity_messages.cpp +++ b/clang/test/OpenMP/task_affinity_messages.cpp @@ -65,7 +65,7 @@ int main(int argc, char **argv, char *env[]) { #pragma omp task affinity(iterator(unsigned argc: // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected '=' in iterator specifier}} expected-error 2 {{expected expression}} expected-error {{expected ',' or ')' after iterator specifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} #pragma omp task affinity(iterator(unsigned argc = // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error 2 {{expected expression}} expected-error {{expected ',' or ')' after iterator specifier}} expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} #pragma omp task affinity(iterator(vector argc = 0:2):argc) // expected-error {{expected integral or pointer type as the iterator-type, not 'vector'}} expected-error {{expected expression}} - #pragma omp task affinity(iterator(vector *argc = nullptr:nullptr+2:0):argc) // expected-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} expected-error {{iterator step expression 0 evaluates to 0}} expected-error {{expected expression}} + #pragma omp task affinity(iterator(vector *argc = nullptr:nullptr+2:0):argc) // expected-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} expected-error {{iterator step expression '0' evaluates to 0}} expected-error {{expected expression}} #pragma omp task affinity(iterator(vector *argc = 0:vector():argc):argc) // expected-error {{converting 'vector' to incompatible type 'vector *'}} expected-error {{expected expression}} foo(); #pragma omp task affinity(iterator(i = 0:10, i = 0:10) : argv[i]) // expected-error {{redefinition of 'i'}} expected-note {{previous definition is here}} diff --git a/clang/test/OpenMP/task_depend_messages.cpp b/clang/test/OpenMP/task_depend_messages.cpp index 3f39c55527b5d..7fc807250361e 100644 --- a/clang/test/OpenMP/task_depend_messages.cpp +++ b/clang/test/OpenMP/task_depend_messages.cpp @@ -78,7 +78,7 @@ int main(int argc, char **argv, char *env[]) { #pragma omp task depend(iterator(unsigned argc: // expected-error {{expected ')'}} omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} expected-warning {{missing ':' after dependency type - ignoring}} expected-note {{to match this '('}} omp50-error {{expected '=' in iterator specifier}} omp50-error 2 {{expected expression}} omp50-error {{expected ',' or ')' after iterator specifier}} omp50-error {{expected ')'}} omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'depobj' in OpenMP clause 'depend'}} omp50-error {{expected ','}} omp50-note {{to match this '('}} omp51-error {{expected '=' in iterator specifier}} omp51-error 2 {{expected expression}} omp51-error {{expected ',' or ')' after iterator specifier}} omp51-error {{expected ')'}} omp51-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset', 'depobj' or 'inoutset' in OpenMP clause 'depend'}} omp51-error {{expected ','}} omp51-note {{to match this '('}} #pragma omp task depend(iterator(unsigned argc = // expected-error {{expected ')'}} omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} expected-warning {{missing ':' after dependency type - ignoring}} expected-note {{to match this '('}} omp50-error 2 {{expected expression}} omp50-error {{expected ',' or ')' after iterator specifier}} omp50-error {{expected ')'}} omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'depobj' in OpenMP clause 'depend'}} omp50-error {{expected ','}} omp50-note {{to match this '('}} omp51-error 2 {{expected expression}} omp51-error {{expected ',' or ')' after iterator specifier}} omp51-error {{expected ')'}} omp51-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset', 'depobj' or 'inoutset' in OpenMP clause 'depend'}} omp51-error {{expected ','}} omp51-note {{to match this '('}} #pragma omp task depend(iterator(vector argc = 0:2):argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} omp50-error {{expected integral or pointer type as the iterator-type, not 'vector'}} omp50-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset' or 'depobj' in OpenMP clause 'depend'}} omp50-error {{expected ','}} omp51-error {{expected integral or pointer type as the iterator-type, not 'vector'}} omp51-error {{expected depend modifier(iterator) or 'in', 'out', 'inout', 'mutexinoutset', 'depobj' or 'inoutset' in OpenMP clause 'depend'}} omp51-error {{expected ','}} - #pragma omp task depend(iterator(vector *argc = nullptr:nullptr+2:0), in:argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} omp50-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} omp50-error {{iterator step expression 0 evaluates to 0}} omp51-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} omp51-error {{iterator step expression 0 evaluates to 0}} + #pragma omp task depend(iterator(vector *argc = nullptr:nullptr+2:0), in:argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} omp50-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} omp50-error {{iterator step expression '0' evaluates to 0}} omp51-error {{invalid operands to binary expression ('std::nullptr_t' and 'int')}} omp51-error {{iterator step expression '0' evaluates to 0}} #pragma omp task depend(iterator(vector *argc = 0:vector():argc), in:argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} omp50-error {{converting 'vector' to incompatible type 'vector *'}} omp51-error {{converting 'vector' to incompatible type 'vector *'}} foo(); #pragma omp task depend(iterator(unsigned argc = 0:10), in : argc) // omp45-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} diff --git a/clang/test/OpenMP/taskloop_simd_linear_messages.cpp b/clang/test/OpenMP/taskloop_simd_linear_messages.cpp index 5bf4785f14be4..3741f4e8286bd 100644 --- a/clang/test/OpenMP/taskloop_simd_linear_messages.cpp +++ b/clang/test/OpenMP/taskloop_simd_linear_messages.cpp @@ -81,7 +81,7 @@ template<int L, class T, class N> T test_template(T* arr, N num) { template<int LEN> int test_warn() { int ind2 = 0; - // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + // expected-warning@+1 {{zero linear step ('ind2' should probably be const)}} #pragma omp taskloop simd linear(ind2:LEN) for (int i = 0; i < 100; i++) { ind2 += LEN; @@ -275,13 +275,13 @@ int main(int argc, char **argv) { } #ifdef OMP52 #pragma omp taskloop simd linear(j: ref) -#else +#else #pragma omp taskloop simd linear(ref(j)) // omp52-error {{old syntax 'linear-modifier(list)' on 'linear' clause was deprecated, use new syntax 'linear(list: [linear-modifier,] step(step-size))'}} #endif for (int k = 0; k < argc; ++k) ++k; #ifdef OMP52 #pragma omp taskloop simd linear(i: step(1), step(2)) // omp52-error {{multiple 'step size' found in linear clause}} -#else +#else #pragma omp taskloop simd linear(i) #endif for (int k = 0; k < argc; ++k) ++k; diff --git a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp index 8e3864ba5e2a4..193f53e52bbf1 100644 --- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp +++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_linear_messages.cpp @@ -100,7 +100,7 @@ template<int LEN> int test_warn() { int ind2 = 0; // expected-error@+2 {{only loop iteration variables are allowed in 'linear' clause in distribute directives}} #pragma omp target - #pragma omp teams distribute parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp teams distribute parallel for simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } diff --git a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp index d6c74eb853a5d..129d88f5b3bcc 100644 --- a/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp +++ b/clang/test/OpenMP/teams_distribute_simd_linear_messages.cpp @@ -100,7 +100,7 @@ template<int LEN> int test_warn() { int ind2 = 0; // expected-error@+2 {{only loop iteration variables are allowed in 'linear' clause in distribute directives}} #pragma omp target - #pragma omp teams distribute simd linear(ind2:LEN) // expected-warning {{zero linear step (ind2 should probably be const)}} + #pragma omp teams distribute simd linear(ind2:LEN) // expected-warning {{zero linear step ('ind2' should probably be const)}} for (int i = 0; i < 100; i++) { ind2 += LEN; } diff --git a/clang/test/Sema/code_align.c b/clang/test/Sema/code_align.c index f01f51382112f..083757b578d0b 100644 --- a/clang/test/Sema/code_align.c +++ b/clang/test/Sema/code_align.c @@ -87,7 +87,7 @@ void foo1(int A) for(int I=0; I<256; ++I) { bar(I); } #ifdef __SIZEOF_INT128__ - // expected-error@+1{{'code_align' attribute requires an integer argument which is a constant power of two between 1 and 4096 inclusive; provided argument was (__int128_t)1311768467294899680ULL << 64}} + // expected-error@+1{{'code_align' attribute requires an integer argument which is a constant power of two between 1 and 4096 inclusive; provided argument was '(__int128_t)1311768467294899680ULL << 64'}} [[clang::code_align((__int128_t)0x1234567890abcde0ULL << 64)]] for(int I=0; I<256; ++I) { bar(I); } #endif @@ -99,7 +99,7 @@ void foo1(int A) #ifdef __SIZEOF_INT128__ // cpp-local-error@+3{{expression is not an integral constant expression}} // cpp-local-note@+2{{left shift of negative value -1311768467294899680}} - // c-local-error@+1{{'code_align' attribute requires an integer argument which is a constant power of two between 1 and 4096 inclusive; provided argument was -(__int128_t)1311768467294899680ULL << 64}} + // c-local-error@+1{{'code_align' attribute requires an integer argument which is a constant power of two between 1 and 4096 inclusive; provided argument was '-(__int128_t)1311768467294899680ULL << 64'}} [[clang::code_align(-(__int128_t)0x1234567890abcde0ULL << 64)]] for(int I=0; I<256; ++I) { bar(I); } #endif diff --git a/clang/test/Sema/warn-int-in-bool-context.c b/clang/test/Sema/warn-int-in-bool-context.c index c111a5af23f57..3139017c2417d 100644 --- a/clang/test/Sema/warn-int-in-bool-context.c +++ b/clang/test/Sema/warn-int-in-bool-context.c @@ -25,8 +25,8 @@ enum num { int test(int a, unsigned b, enum num n) { boolean r; - r = a << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << a) != 0'?}} - r = MM; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << a) != 0'?}} + r = a << a; // expected-warning {{converting the result of '<<' to a boolean}} + r = MM; // expected-warning {{converting the result of '<<' to a boolean}} r = (1 << 7); // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} r = 2UL << 2; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} r = 0 << a; // expected-warning {{converting the result of '<<' to a boolean always evaluates to false}} @@ -34,23 +34,23 @@ int test(int a, unsigned b, enum num n) { r = 1 << 0; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} r = 1 << 2; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} r = 1ULL << 2; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} - r = 2 << b; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << b) != 0'?}} + r = 2 << b; // expected-warning {{converting the result of '<<' to a boolean}} r = (unsigned)(2 << b); r = b << 7; - r = (1 << a); // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}} - r = TWO << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << a) != 0'?}} - r = a << 7; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << 7) != 0'?}} - r = ONE << a; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}} - if (TWO << a) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(2 << a) != 0'?}} + r = (1 << a); // expected-warning {{converting the result of '<<' to a boolean}} + r = TWO << a; // expected-warning {{converting the result of '<<' to a boolean}} + r = a << 7; // expected-warning {{converting the result of '<<' to a boolean}} + r = ONE << a; // expected-warning {{converting the result of '<<' to a boolean}} + if (TWO << a) // expected-warning {{converting the result of '<<' to a boolean}} return a; - + a = 1 << 2 ? 0: 1; // expected-warning {{converting the result of '<<' to a boolean always evaluates to true}} - a = 1 << a ? 0: 1; // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}} + a = 1 << a ? 0: 1; // expected-warning {{converting the result of '<<' to a boolean}} - for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(1 << a) != 0'?}} + for (a = 0; 1 << a; a++) // expected-warning {{converting the result of '<<' to a boolean}} ; - if (a << TWO) // expected-warning {{converting the result of '<<' to a boolean; did you mean '(a << 2) != 0'?}} + if (a << TWO) // expected-warning {{converting the result of '<<' to a boolean}} return a; if (n || two) diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp index 66a2a19ceb321..7634dbf2f6733 100644 --- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp +++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp @@ -121,13 +121,13 @@ MyLongPointerFromConversion global2; void initLocalGslPtrWithTempOwner() { MyIntPointer p = MyIntOwner{}; // expected-warning {{object backing the pointer will be destroyed at the end of the full-expression}} - MyIntPointer pp = p = MyIntOwner{}; // expected-warning {{object backing the pointer p will be}} - p = MyIntOwner{}; // expected-warning {{object backing the pointer p }} + MyIntPointer pp = p = MyIntOwner{}; // expected-warning {{object backing the pointer 'p' will be}} + p = MyIntOwner{}; // expected-warning {{object backing the pointer 'p' }} pp = p; // no warning - global = MyIntOwner{}; // expected-warning {{object backing the pointer global }} + global = MyIntOwner{}; // expected-warning {{object backing the pointer 'global' }} MyLongPointerFromConversion p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the pointer will be destroyed at the end of the full-expression}} - p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the pointer p2 }} - global2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the pointer global2 }} + p2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the pointer 'p2' }} + global2 = MyLongOwnerWithConversion{}; // expected-warning {{object backing the pointer 'global2' }} } @@ -707,7 +707,7 @@ std::string_view test1() { std::string_view t1 = Ref(std::string()); // expected-warning {{object backing}} t1 = Ref(std::string()); // expected-warning {{object backing}} return Ref(std::string()); // expected-warning {{returning address}} - + std::string_view t2 = TakeSv(std::string()); // expected-warning {{object backing}} t2 = TakeSv(std::string()); // expected-warning {{object backing}} return TakeSv(std::string()); // expected-warning {{returning address}} @@ -731,15 +731,15 @@ std::string_view test2(Foo<std::string> r1, Foo<std::string_view> r2) { std::string_view t1 = Foo<std::string>().get(); // expected-warning {{object backing}} t1 = Foo<std::string>().get(); // expected-warning {{object backing}} return r1.get(); // expected-warning {{address of stack}} - + std::string_view t2 = Foo<std::string_view>().get(); t2 = Foo<std::string_view>().get(); return r2.get(); // no warning on no-LB-annotated method. - std::string_view t3 = Foo<std::string>().getNoLB(); - t3 = Foo<std::string>().getNoLB(); - return r1.getNoLB(); + std::string_view t3 = Foo<std::string>().getNoLB(); + t3 = Foo<std::string>().getNoLB(); + return r1.getNoLB(); } struct Bar {}; @@ -771,7 +771,7 @@ void test4() { // Ideally, we would diagnose the following case, but due to implementation // constraints, we do not. const int& t4 = *MySpan<int>(std::vector<int>{}).begin(); - + auto it1 = MySpan<int>(v).begin(); // expected-warning {{temporary whose address is use}} auto it2 = ReturnFirstIt(MySpan<int>(v)); // expected-warning {{temporary whose address is used}} } @@ -821,7 +821,7 @@ std::string_view foo(std::string_view sv [[clang::lifetimebound]]); void test1() { std::string_view k1 = S().sv; // OK std::string_view k2 = S().s; // expected-warning {{object backing the pointer will}} - + std::string_view k3 = Q().get()->sv; // OK std::string_view k4 = Q().get()->s; // expected-warning {{object backing the pointer will}} @@ -863,7 +863,7 @@ struct StatusOr { const char* foo() { StatusOr<std::string> s; return s->data(); // expected-warning {{address of stack memory associated with local variable}} - + StatusOr<std::string_view> s2; return s2->data(); diff --git a/clang/test/SemaCXX/attr-lifetime-capture-by.cpp b/clang/test/SemaCXX/attr-lifetime-capture-by.cpp index be1cd730ed40c..03ab425331720 100644 --- a/clang/test/SemaCXX/attr-lifetime-capture-by.cpp +++ b/clang/test/SemaCXX/attr-lifetime-capture-by.cpp @@ -13,12 +13,12 @@ void nonMember( const int &x1 [[clang::lifetime_capture_by(s, t)]], S &s, S &t, - const int &x2 [[clang::lifetime_capture_by(12345 + 12)]], // expected-error {{'lifetime_capture_by' attribute argument 12345 + 12 is not a known function parameter; must be a function parameter, 'this', 'global' or 'unknown'}} + const int &x2 [[clang::lifetime_capture_by(12345 + 12)]], // expected-error {{'lifetime_capture_by' attribute argument '12345 + 12' is not a known function parameter; must be a function parameter, 'this', 'global' or 'unknown'}} const int &x3 [[clang::lifetime_capture_by(abcdefgh)]], // expected-error {{'lifetime_capture_by' attribute argument 'abcdefgh' is not a known function parameter; must be a function parameter, 'this', 'global' or 'unknown'}} - const int &x4 [[clang::lifetime_capture_by("abcdefgh")]], // expected-error {{'lifetime_capture_by' attribute argument "abcdefgh" is not a known function parameter; must be a function parameter, 'this', 'global' or 'unknown'}} + const int &x4 [[clang::lifetime_capture_by("abcdefgh")]], // expected-error {{'lifetime_capture_by' attribute argument '"abcdefgh"' is not a known function parameter; must be a function parameter, 'this', 'global' or 'unknown'}} const int &x5 [[clang::lifetime_capture_by(this)]], // expected-error {{'lifetime_capture_by' argument references unavailable implicit 'this'}} const int &x6 [[clang::lifetime_capture_by()]], // expected-error {{'lifetime_capture_by' attribute specifies no capturing entity}} - const int& x7 [[clang::lifetime_capture_by(u, + const int& x7 [[clang::lifetime_capture_by(u, x7)]], // expected-error {{'lifetime_capture_by' argument references itself}} const int &x8 [[clang::lifetime_capture_by(global)]], const int &x9 [[clang::lifetime_capture_by(unknown)]], @@ -35,9 +35,9 @@ void global_param_name(const int& global, // expected-error {{parameter cannot b const int& s [[clang::lifetime_capture_by(global)]]); struct T { void member( - const int &x [[clang::lifetime_capture_by(s)]], + const int &x [[clang::lifetime_capture_by(s)]], S &s, - S &t, + S &t, const int &y [[clang::lifetime_capture_by(s)]], const int &z [[clang::lifetime_capture_by(this, x, y)]], const int &u [[clang::lifetime_capture_by(global, unknown, x, s)]]) diff --git a/clang/test/SemaCXX/attr-lifetimebound.cpp b/clang/test/SemaCXX/attr-lifetimebound.cpp index e7c8b35cb0c48..2bb88171bdfe4 100644 --- a/clang/test/SemaCXX/attr-lifetimebound.cpp +++ b/clang/test/SemaCXX/attr-lifetimebound.cpp @@ -69,10 +69,10 @@ namespace usage_ok { const int& s = crefparam(2); // expected-warning {{temporary bound to local reference 's' will be destroyed at the end of the full-expression}} void test_assignment() { - p = A().class_member(); // expected-warning {{object backing the pointer p will be destroyed at the end of the full-expression}} - p = {A().class_member()}; // expected-warning {{object backing the pointer p will be destroyed at the end of the full-expression}} - q = A(); // expected-warning {{object backing the pointer q will be destroyed at the end of the full-expression}} - r = A(1); // expected-warning {{object backing the pointer r will be destroyed at the end of the full-expression}} + p = A().class_member(); // expected-warning {{object backing the pointer 'p' will be destroyed at the end of the full-expression}} + p = {A().class_member()}; // expected-warning {{object backing the pointer 'p' will be destroyed at the end of the full-expression}} + q = A(); // expected-warning {{object backing the pointer 'q' will be destroyed at the end of the full-expression}} + r = A(1); // expected-warning {{object backing the pointer 'r' will be destroyed at the end of the full-expression}} } struct FieldCheck { @@ -85,7 +85,7 @@ namespace usage_ok { Set c; int * d; }; - Pair p; + Pair p; FieldCheck(const int& a): p(a){} Pair& getR() [[clang::lifetimebound]] { return p; } Pair* getP() [[clang::lifetimebound]] { return &p; } @@ -356,8 +356,8 @@ struct StatusOr { }; void test(StatusOr<FooView> foo1, StatusOr<NonAnnotatedFooView> foo2) { - foo1 = Foo(); // expected-warning {{object backing foo1 will be destroyed at the end}} + foo1 = Foo(); // expected-warning {{object backing 'foo1' will be destroyed at the end}} // This warning is triggered by the lifetimebound annotation, regardless of whether the class type is annotated with GSL. - foo2 = NonAnnotatedFoo(); // expected-warning {{object backing foo2 will be destroyed at the end}} + foo2 = NonAnnotatedFoo(); // expected-warning {{object backing 'foo2' will be destroyed at the end}} } } // namespace GH106372 diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp index 202a819655217..0e759a01375de 100644 --- a/clang/test/SemaCXX/cxx2c-pack-indexing.cpp +++ b/clang/test/SemaCXX/cxx2c-pack-indexing.cpp @@ -4,8 +4,8 @@ struct NotAPack; template <typename T, auto V, template<typename> typename Tp> void not_pack() { int i = 0; - i...[0]; // expected-error {{i does not refer to the name of a parameter pack}} - V...[0]; // expected-error {{V does not refer to the name of a parameter pack}} + i...[0]; // expected-error {{'i' does not refer to the name of a parameter pack}} + V...[0]; // expected-error {{'V' does not refer to the name of a parameter pack}} NotAPack...[0] a; // expected-error{{'NotAPack' does not refer to the name of a parameter pack}} T...[0] b; // expected-error{{'T' does not refer to the name of a parameter pack}} Tp...[0] c; // expected-error{{'Tp' does not refer to the name of a parameter pack}} @@ -42,11 +42,11 @@ int test_types() { void test() { params<0>(); // expected-note{{here}} \ - // expected-error@#error-param-size {{invalid index 0 for pack p of size 0}} + // expected-error@#error-param-size {{invalid index 0 for pack 'p' of size 0}} params<1>(0); // expected-note{{here}} \ - // expected-error@#error-param-size {{invalid index 1 for pack p of size 1}} + // expected-error@#error-param-size {{invalid index 1 for pack 'p' of size 1}} params<-1>(0); // expected-note{{here}} \ - // expected-error@#error-param-size {{invalid index -1 for pack p of size 1}} + // expected-error@#error-param-size {{invalid index -1 for pack 'p' of size 1}} test_types<-1>(); //expected-note {{in instantiation}} \ // expected-error@#error-type-size {{invalid index -1 for pack 'T' of size 0}} @@ -190,7 +190,7 @@ void h() { static_assert(__is_same(decltype(g<foo{}, bar{}, baz{}>(sequence<0, 2, 1>())), W<foo{}, baz{}, bar{}>)); g<foo{}>(sequence<4>()); - // expected-error@#nttp-use {{invalid index 4 for pack args of size 1}} + // expected-error@#nttp-use {{invalid index 4 for pack 'args' of size 1}} // expected-note-re@-2 {{function template specialization '{{.*}}' requested here}} } } @@ -214,7 +214,7 @@ void f( ) { test(1); test2<1>(); test2(); - // expected-error@#test2-R {{invalid index 0 for pack args of size 0}} + // expected-error@#test2-R {{invalid index 0 for pack 'args' of size 0}} // expected-note@#test2-call {{requested here}} // expected-note@-3 {{requested here}} } diff --git a/clang/test/SemaCXX/warn-dangling-local.cpp b/clang/test/SemaCXX/warn-dangling-local.cpp index 5ad5013b6f025..81f6d9aba5fe4 100644 --- a/clang/test/SemaCXX/warn-dangling-local.cpp +++ b/clang/test/SemaCXX/warn-dangling-local.cpp @@ -4,10 +4,10 @@ using T = int[]; void f() { int *p = &(int&)(int&&)0; // expected-warning {{temporary whose address is used as value of local variable 'p' will be destroyed at the end of the full-expression}} - p = &(int&)(int&&)0; // expected-warning {{object backing the pointer p will be destroyed at the end of the full-expression}} + p = &(int&)(int&&)0; // expected-warning {{object backing the pointer 'p' will be destroyed at the end of the full-expression}} int *q = (int *const &)T{1, 2, 3}; // expected-warning {{temporary whose address is used as value of local variable 'q' will be destroyed at the end of the full-expression}} - q = (int *const &)T{1, 2, 3}; // expected-warning {{object backing the pointer q will be destroyed at the end of the full-expression}} + q = (int *const &)T{1, 2, 3}; // expected-warning {{object backing the pointer 'q' will be destroyed at the end of the full-expression}} // FIXME: We don't warn here because the 'int*' temporary is not const, but // it also can't have actually changed since it was created, so we could @@ -35,5 +35,5 @@ struct basic_string { } // namespace std void test(const char* a) { // verify we're emitting the `-Wdangling-assignment-gsl` warning. - a = std::basic_string().c_str(); // expected-warning {{object backing the pointer a will be destroyed at the end of the full-expression}} + a = std::basic_string().c_str(); // expected-warning {{object backing the pointer 'a' will be destroyed at the end of the full-expression}} } diff --git a/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl index 4adb0555c35be..9d0c206a3b3ad 100644 --- a/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl +++ b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl @@ -32,24 +32,24 @@ void test_asuint_first_arg_const(double D) { const uint A = 0; uint B; asuint(D, A, B); - // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}} + // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}} } void test_asuint_second_arg_const(double D) { const uint A = 0; uint B; asuint(D, B, A); - // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}} + // expected-error@hlsl/hlsl_intrinsics.h:* {{read-only variable is not assignable}} } void test_asuint_imidiate_value(double D) { uint B; asuint(D, B, 1); - // expected-error@-1 {{cannot bind non-lvalue argument 1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument '1' to out paramemter}} } void test_asuint_expr(double D) { uint B; asuint(D, B, B + 1); - // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out paramemter}} } diff --git a/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl index 7000affaef77f..12c818acec035 100644 --- a/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl +++ b/clang/test/SemaHLSL/BuiltIns/select-errors.hlsl @@ -61,5 +61,5 @@ int2 test_select_builtin_second_arg_not_vector(bool2 p0, int2 t0, int f0) { // if vector last 2 aren't same type (so both are vectors but wrong type) int1 test_select_builtin_ diff _types(bool1 p0, int1 t0, float1 f0) { - return __builtin_hlsl_select(p0, t0, f0); // expected-error{{second and third arguments to __builtin_hlsl_select must be of scalar or vector type with matching scalar element type: 'vector<int, [...]>' vs 'vector<float, [...]>'}} + return __builtin_hlsl_select(p0, t0, f0); // expected-error{{second and third arguments to '__builtin_hlsl_select' must be of scalar or vector type with matching scalar element type: 'vector<int, [...]>' vs 'vector<float, [...]>'}} } diff --git a/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl index 18d2b692b335b..312230a2d6aff 100644 --- a/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl +++ b/clang/test/SemaHLSL/BuiltIns/splitdouble-errors.hlsl @@ -2,75 +2,75 @@ void test_no_second_arg(double D) { __builtin_hlsl_elementwise_splitdouble(D); - // expected-error@-1 {{too few arguments to function call, expected 3, have 1}} + // expected-error@-1 {{too few arguments to function call, expected 3, have 1}} } void test_no_third_arg(double D) { uint A; __builtin_hlsl_elementwise_splitdouble(D, A); - // expected-error@-1 {{too few arguments to function call, expected 3, have 2}} + // expected-error@-1 {{too few arguments to function call, expected 3, have 2}} } void test_too_many_arg(double D) { uint A, B, C; __builtin_hlsl_elementwise_splitdouble(D, A, B, C); - // expected-error@-1 {{too many arguments to function call, expected 3, have 4}} + // expected-error@-1 {{too many arguments to function call, expected 3, have 4}} } void test_first_arg_type_mismatch(bool3 D) { uint3 A, B; __builtin_hlsl_elementwise_splitdouble(D, A, B); - // expected-error@-1 {{invalid operand of type 'bool3' (aka 'vector<bool, 3>') where 'double' or a vector of such type is required}} + // expected-error@-1 {{invalid operand of type 'bool3' (aka 'vector<bool, 3>') where 'double' or a vector of such type is required}} } void test_second_arg_type_mismatch(double D) { bool A; uint B; __builtin_hlsl_elementwise_splitdouble(D, A, B); - // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}} + // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}} } void test_third_arg_type_mismatch(double D) { bool A; uint B; __builtin_hlsl_elementwise_splitdouble(D, B, A); - // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}} + // expected-error@-1 {{invalid operand of type 'bool' where 'unsigned int' or a vector of such type is required}} } void test_const_second_arg(double D) { const uint A = 1; uint B; __builtin_hlsl_elementwise_splitdouble(D, A, B); - // expected-error@-1 {{cannot bind non-lvalue argument A to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument 'A' to out paramemter}} } void test_const_third_arg(double D) { uint A; const uint B = 1; __builtin_hlsl_elementwise_splitdouble(D, A, B); - // expected-error@-1 {{cannot bind non-lvalue argument B to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument 'B' to out paramemter}} } void test_number_second_arg(double D) { uint B; __builtin_hlsl_elementwise_splitdouble(D, (uint)1, B); - // expected-error@-1 {{cannot bind non-lvalue argument (uint)1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument '(uint)1' to out paramemter}} } void test_number_third_arg(double D) { uint B; __builtin_hlsl_elementwise_splitdouble(D, B, (uint)1); - // expected-error@-1 {{cannot bind non-lvalue argument (uint)1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument '(uint)1' to out paramemter}} } void test_expr_second_arg(double D) { uint B; __builtin_hlsl_elementwise_splitdouble(D, B+1, B); - // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out paramemter}} } void test_expr_third_arg(double D) { uint B; __builtin_hlsl_elementwise_splitdouble(D, B, B+1); - // expected-error@-1 {{cannot bind non-lvalue argument B + 1 to out paramemter}} + // expected-error@-1 {{cannot bind non-lvalue argument 'B + 1' to out paramemter}} } diff --git a/clang/test/SemaHLSL/Language/OutputParameters.hlsl b/clang/test/SemaHLSL/Language/OutputParameters.hlsl index 6d4d59771f8e4..e4d370e4ba4a0 100644 --- a/clang/test/SemaHLSL/Language/OutputParameters.hlsl +++ b/clang/test/SemaHLSL/Language/OutputParameters.hlsl @@ -10,11 +10,11 @@ void InOutVecFn(inout float3) {} void case1() { float f; int i; - OutVecFn(f); // expected-error{{illegal scalar extension cast on argument f to out paramemter}} - InOutVecFn(f); // expected-error{{illegal scalar extension cast on argument f to inout paramemter}} + OutVecFn(f); // expected-error{{illegal scalar extension cast on argument 'f' to out paramemter}} + InOutVecFn(f); // expected-error{{illegal scalar extension cast on argument 'f' to inout paramemter}} - OutVecFn(i); // expected-error{{illegal scalar extension cast on argument i to out paramemter}} - InOutVecFn(i); // expected-error{{illegal scalar extension cast on argument i to inout paramemter}} + OutVecFn(i); // expected-error{{illegal scalar extension cast on argument 'i' to out paramemter}} + InOutVecFn(i); // expected-error{{illegal scalar extension cast on argument 'i' to inout paramemter}} } // Case 2: Conversion warnings on argument initialization. Clang generates diff --git a/clang/test/SemaHLSL/parameter_modifiers.hlsl b/clang/test/SemaHLSL/parameter_modifiers.hlsl index 5c4a1e4ec2926..68b3d5ac2de5e 100644 --- a/clang/test/SemaHLSL/parameter_modifiers.hlsl +++ b/clang/test/SemaHLSL/parameter_modifiers.hlsl @@ -48,8 +48,8 @@ void callFns() { // Call with literal arguments. implicitFn(1); // Ok. inFn(1); // Ok. - inoutFn(1); // expected-error{{cannot bind non-lvalue argument 1 to inout paramemter}} - outFn(1); // expected-error{{cannot bind non-lvalue argument 1 to out paramemter}} + inoutFn(1); // expected-error{{cannot bind non-lvalue argument '1' to inout paramemter}} + outFn(1); // expected-error{{cannot bind non-lvalue argument '1' to out paramemter}} // Call with variables. float f; diff --git a/clang/test/SemaOpenCL/to_addr_builtin.cl b/clang/test/SemaOpenCL/to_addr_builtin.cl index 5cd74885aa9df..51721a6434518 100644 --- a/clang/test/SemaOpenCL/to_addr_builtin.cl +++ b/clang/test/SemaOpenCL/to_addr_builtin.cl @@ -24,21 +24,21 @@ void test(void) { #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space)) // expected-error@-2{{use of undeclared identifier 'to_global'}} #else - // expected-error@-4{{invalid argument x to function: 'to_global', expecting a generic pointer argument}} + // expected-error@-4{{invalid argument 'x' to function: 'to_global', expecting a generic pointer argument}} #endif glob = to_global(con); #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space)) // expected-error@-2{{use of undeclared identifier 'to_global'}} #else - // expected-error@-4{{invalid argument con to function: 'to_global', expecting a generic pointer argument}} + // expected-error@-4{{invalid argument 'con' to function: 'to_global', expecting a generic pointer argument}} #endif glob = to_global(con_typedef); #if (__OPENCL_C_VERSION__ < CL_VERSION_2_0) || (__OPENCL_C_VERSION__ >= CL_VERSION_3_0 && !defined(__opencl_c_generic_address_space)) // expected-error@-2{{use of undeclared identifier 'to_global'}} #else - // expected-error@-4{{invalid argument con_typedef to function: 'to_global', expecting a generic pointer argument}} + // expected-error@-4{{invalid argument 'con_typedef' to function: 'to_global', expecting a generic pointer argument}} #endif loc = to_global(glob); diff --git a/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp b/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp index cb309fb2e19e9..e72288801a830 100644 --- a/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ b/clang/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -420,6 +420,7 @@ enum ModifierType { MT_Q, MT_ObjCClass, MT_ObjCInstance, + MT_Quoted, }; static StringRef getModifierName(ModifierType MT) { @@ -447,6 +448,8 @@ static StringRef getModifierName(ModifierType MT) { return "objcclass"; case MT_ObjCInstance: return "objcinstance"; + case MT_Quoted: + return "quoted"; case MT_Unknown: llvm_unreachable("invalid modifier type"); } @@ -1113,6 +1116,7 @@ Piece *DiagnosticTextBuilder::DiagText::parseDiagText(StringRef &Text, .Case("q", MT_Q) .Case("objcclass", MT_ObjCClass) .Case("objcinstance", MT_ObjCInstance) + .Case("quoted", MT_Quoted) .Case("", MT_Placeholder) .Default(MT_Unknown); @@ -1264,6 +1268,7 @@ Piece *DiagnosticTextBuilder::DiagText::parseDiagText(StringRef &Text, case MT_Placeholder: case MT_ObjCClass: case MT_ObjCInstance: + case MT_Quoted: case MT_Ordinal: case MT_Human: { Parsed.push_back(New<PlaceholderPiece>(ModType, parseModifier(Text))); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits