diff options
Diffstat (limited to 'contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td')
-rw-r--r-- | contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td | 1624 |
1 files changed, 1219 insertions, 405 deletions
diff --git a/contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td b/contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td index c57b8eca7deb..07ba4ecf7e12 100644 --- a/contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/contrib/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -66,6 +66,7 @@ def warn_infinite_recursive_function : Warning< def warn_comma_operator : Warning<"possible misuse of comma operator here">, InGroup<DiagGroup<"comma">>, DefaultIgnore; def note_cast_to_void : Note<"cast expression to void to silence warning">; +def note_cast_operand_to_int : Note<"cast one or both operands to int to silence this warning">; // Constant expressions def err_expr_not_ice : Error< @@ -82,11 +83,11 @@ def err_typecheck_converted_constant_expression_indirect : Error< "bind reference to a temporary">; def err_expr_not_cce : Error< "%select{case value|enumerator value|non-type template argument|" - "array size|explicit specifier argument}0 " - "is not a constant expression">; + "array size|explicit specifier argument|noexcept specifier argument|" + "call to 'size()'|call to 'data()'}0 is not a constant expression">; def ext_cce_narrowing : ExtWarn< "%select{case value|enumerator value|non-type template argument|" - "array size|explicit specifier argument}0 " + "array size|explicit specifier argument|noexcept specifier argument}0 " "%select{cannot be narrowed from type %2 to %3|" "evaluates to %2, which cannot be narrowed to type %3}1">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure; @@ -111,12 +112,22 @@ 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_string_literal_from_predefined : ExtWarn< + "expansion of predefined identifier '%0' to a string literal is a Microsoft extension">, + InGroup<MicrosoftStringLiteralFromPredefined>; def warn_float_overflow : Warning< "magnitude of floating-point constant too large for type %0; maximum is %1">, InGroup<LiteralRange>; def warn_float_underflow : Warning< "magnitude of floating-point constant too small for type %0; minimum is %1">, InGroup<LiteralRange>; +def warn_float_compare_literal : Warning< + "floating-point comparison is always %select{true|false}0; " + "constant cannot be represented exactly in type %1">, + InGroup<LiteralRange>; def warn_double_const_requires_fp64 : Warning< "double precision constant requires %select{cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64}0, " "casting to single precision">; @@ -126,6 +137,18 @@ def err_half_const_requires_fp16 : Error< // C99 variable-length arrays def ext_vla : Extension<"variable length arrays are a C99 feature">, InGroup<VLAExtension>; +// In C++ language modes, we warn by default as an extension, while in GNU++ +// language modes, we warn as an extension but add the warning group to -Wall. +def ext_vla_cxx : ExtWarn< + "variable length arrays in C++ are a Clang extension">, + InGroup<VLACxxExtension>; +def ext_vla_cxx_in_gnu_mode : Extension<ext_vla_cxx.Summary>, + InGroup<VLACxxExtension>; +def ext_vla_cxx_static_assert : ExtWarn< + "variable length arrays in C++ are a Clang extension; did you mean to use " + "'static_assert'?">, InGroup<VLAUseStaticAssert>; +def ext_vla_cxx_in_gnu_mode_static_assert : Extension< + ext_vla_cxx_static_assert.Summary>, InGroup<VLAUseStaticAssert>; def warn_vla_used : Warning<"variable length array used">, InGroup<VLA>, DefaultIgnore; def err_vla_in_sfinae : Error< @@ -142,7 +165,9 @@ def ext_vla_folded_to_constant : ExtWarn< "variable length array folded to constant array as an extension">, InGroup<GNUFoldingConstant>; def err_vla_unsupported : Error< - "variable length arrays are not supported for the current target">; + "variable length arrays are not supported for %select{the current target|'%1'}0">; +def err_vla_in_coroutine_unsupported : Error< + "variable length arrays in a coroutine are not supported">; def note_vla_unsupported : Note< "variable length arrays are not supported for the current target">; @@ -179,8 +204,10 @@ def err_designator_for_scalar_or_sizeless_init : Error< def warn_initializer_overrides : Warning< "initializer %select{partially |}0overrides prior initialization of " "this subobject">, InGroup<InitializerOverrides>; -def ext_initializer_overrides : ExtWarn<warn_initializer_overrides.Text>, +def ext_initializer_overrides : ExtWarn<warn_initializer_overrides.Summary>, InGroup<InitializerOverrides>, SFINAEFailure; +def ext_initializer_union_overrides : ExtWarn<warn_initializer_overrides.Summary>, + InGroup<InitializerOverrides>, DefaultError, SFINAEFailure; def err_initializer_overrides_destructed : Error< "initializer would partially override prior initialization of object of " "type %1 with non-trivial destruction">; @@ -196,7 +223,8 @@ def ext_flexible_array_init : Extension< // C++20 designated initializers def ext_cxx_designated_init : Extension< - "designated initializers are a C++20 extension">, InGroup<CXX20Designator>; + "designated initializers are a C++20 extension">, InGroup<CXX20Designator>, + SuppressInSystemMacro; def warn_cxx17_compat_designated_init : Warning< "designated initializers are incompatible with C++ standards before C++20">, InGroup<CXXPre20CompatPedantic>, DefaultIgnore; @@ -226,6 +254,10 @@ def ext_imaginary_constant : Extension< "imaginary constants are a GNU extension">, InGroup<GNUImaginaryConstant>; def ext_integer_complex : Extension< "complex integer types are a GNU extension">, InGroup<GNUComplexInteger>; +def ext_c23_auto_non_plain_identifier : Extension< + "type inference of a declaration other than a plain identifier with optional " + "trailing attributes is a Clang extension">, + InGroup<DiagGroup<"auto-decl-extensions">>; def err_invalid_saturation_spec : Error<"'_Sat' specifier is only valid on " "'_Fract' or '_Accum', not '%0'">; @@ -267,10 +299,12 @@ def err_invalid_vector_double_decl_spec : Error < def err_invalid_vector_bool_int128_decl_spec : Error < "use of '__int128' with '__vector bool' requires VSX support enabled (on " "POWER10 or later)">; +def err_invalid_vector_int128_decl_spec : Error< + "use of '__int128' with '__vector' requires extended Altivec support" + " (available on POWER8 or later)">; def err_invalid_vector_long_long_decl_spec : Error < - "use of 'long long' with '__vector bool' requires VSX support (available on " - "POWER7 or later) or extended Altivec support (available on POWER8 or later) " - "to be enabled">; + "use of 'long long' with '__vector' requires VSX support (available on " + "POWER7 or later) to be enabled">; def err_invalid_vector_long_double_decl_spec : Error< "cannot use 'long double' with '__vector'">; def warn_vector_long_decl_spec_combination : Warning< @@ -284,9 +318,9 @@ def err_bad_parameter_name : Error< "%0 cannot be the name of a parameter">; def err_bad_parameter_name_template_id : Error< "parameter name cannot have template arguments">; -def ext_parameter_name_omitted_c2x : ExtWarn< - "omitting the parameter name in a function definition is a C2x extension">, - InGroup<C2x>; +def ext_parameter_name_omitted_c23 : ExtWarn< + "omitting the parameter name in a function definition is a C23 extension">, + InGroup<C23>; def err_anyx86_interrupt_attribute : Error< "%select{x86|x86-64}0 'interrupt' attribute only applies to functions that " "have %select{a 'void' return type|" @@ -294,10 +328,12 @@ def err_anyx86_interrupt_attribute : Error< "a pointer as the first parameter|a %2 type as the second parameter}1">; def err_anyx86_interrupt_called : Error< "interrupt service routine cannot be called directly">; -def warn_anyx86_interrupt_regsave : Warning< - "interrupt service routine should only call a function" - " with attribute 'no_caller_saved_registers'">, - InGroup<DiagGroup<"interrupt-service-routine">>; +def warn_anyx86_excessive_regsave : Warning< + "%select{interrupt service routine|function with attribute" + " 'no_caller_saved_registers'}0 should only call a function" + " with attribute 'no_caller_saved_registers'" + " or be compiled with '-mgeneral-regs-only'">, + InGroup<DiagGroup<"excessive-regsave">>; def warn_arm_interrupt_calling_convention : Warning< "call to function without interrupt attribute could clobber interruptee's VFP registers">, InGroup<Extra>; @@ -388,10 +424,16 @@ def warn_reserved_extern_symbol: Warning< "identifier %0 is reserved because %select{" "<ERROR>|" // ReservedIdentifierStatus::NotReserved "it starts with '_' at global scope|" + "it starts with '_' and has C language linkage|" "it starts with '__'|" "it starts with '_' followed by a capital letter|" "it contains '__'}1">, InGroup<ReservedIdentifier>, DefaultIgnore; +def warn_deprecated_literal_operator_id: Warning< + "identifier %0 preceded by whitespace in a literal operator declaration " + "is deprecated">, InGroup<DeprecatedLiteralOperator>, DefaultIgnore; +def warn_reserved_module_name : Warning< + "%0 is a reserved name for a module">, InGroup<ReservedModuleIdentifier>; def warn_parameter_size: Warning< "%0 is a large (%1 bytes) pass-by-value argument; " @@ -408,18 +450,15 @@ def warn_return_value_udt_incomplete: Warning< def warn_implicit_function_decl : Warning< "implicit declaration of function %0">, InGroup<ImplicitFunctionDeclare>, DefaultIgnore; -def ext_implicit_function_decl : ExtWarn< - "implicit declaration of function %0 is invalid in C99">, - InGroup<ImplicitFunctionDeclare>; +def ext_implicit_function_decl_c99 : ExtWarn< + "call to undeclared function %0; ISO C99 and later do not support implicit " + "function declarations">, InGroup<ImplicitFunctionDeclare>; def note_function_suggestion : Note<"did you mean %0?">; def err_ellipsis_first_param : Error< "ISO C requires a named parameter before '...'">; def err_declarator_need_ident : Error<"declarator requires an identifier">; def err_language_linkage_spec_unknown : Error<"unknown linkage language">; -def err_language_linkage_spec_not_ascii : Error< - "string literal in language linkage specifier cannot have an " - "encoding-prefix">; def ext_use_out_of_scope_declaration : ExtWarn< "use of out-of-scope declaration of %0%select{| whose type is not " "compatible with that of an implicit declaration}1">, @@ -434,7 +473,7 @@ def warn_qual_return_type : Warning< def warn_deprecated_redundant_constexpr_static_def : Warning< "out-of-line definition of constexpr static data member is redundant " "in C++17 and is deprecated">, - InGroup<Deprecated>, DefaultIgnore; + InGroup<DeprecatedRedundantConstexprStaticDef>, DefaultIgnore; def warn_decl_shadow : Warning<"declaration shadows a %select{" @@ -445,9 +484,9 @@ def warn_decl_shadow : "typedef in %2|" "type alias in %2|" "structured binding}1">, - InGroup<Shadow>, DefaultIgnore; + InGroup<Shadow>, DefaultIgnore, SuppressInSystemMacro; def warn_decl_shadow_uncaptured_local : - Warning<warn_decl_shadow.Text>, + Warning<warn_decl_shadow.Summary>, InGroup<ShadowUncapturedLocal>, DefaultIgnore; def warn_ctor_parm_shadows_field: Warning<"constructor parameter %0 shadows the field %1 of %2">, @@ -483,6 +522,8 @@ def warn_cxx17_compat_decomp_decl_spec : Warning< def err_decomp_decl_type : Error< "decomposition declaration cannot be declared with type %0; " "declared type must be 'auto' or reference to 'auto'">; +def err_decomp_decl_constraint : Error< + "decomposition declaration cannot be declared with constrained 'auto'">; def err_decomp_decl_parens : Error< "decomposition declaration cannot be declared with parentheses">; def err_decomp_decl_template : Error< @@ -551,11 +592,10 @@ def err_using_decl_can_not_refer_to_class_member : Error< def warn_cxx17_compat_using_decl_class_member_enumerator : Warning< "member using declaration naming a non-member enumerator is incompatible " "with C++ standards before C++20">, InGroup<CXXPre20Compat>, DefaultIgnore; -def ext_using_decl_class_member_enumerator : ExtWarn< - "member using declaration naming a non-member enumerator is " - "a C++20 extension">, InGroup<CXX20>; def err_using_enum_is_dependent : Error< "using-enum cannot name a dependent type">; +def err_using_enum_not_enum : Error< + "%0 is not an enumerated type">; def err_ambiguous_inherited_constructor : Error< "constructor of %0 inherited from multiple base class subobjects">; def note_ambiguous_inherited_constructor_using : Note< @@ -652,6 +692,13 @@ def warn_maybe_falloff_nonvoid_function : Warning< def warn_falloff_nonvoid_function : Warning< "non-void function does not return a value">, InGroup<ReturnType>; +def warn_const_attr_with_pure_attr : Warning< + "'const' attribute imposes more restrictions; 'pure' attribute ignored">, + InGroup<IgnoredAttributes>; +def warn_pure_function_returns_void : Warning< + "'%select{pure|const}0' attribute on function returning 'void'; attribute ignored">, + InGroup<IgnoredAttributes>; + def err_maybe_falloff_nonvoid_block : Error< "non-void block does not return a value in all control paths">; def err_falloff_nonvoid_block : Error< @@ -682,13 +729,24 @@ def warn_unreachable_return : Warning< def warn_unreachable_loop_increment : Warning< "loop will run at most once (loop increment never executed)">, InGroup<UnreachableCodeLoopIncrement>, DefaultIgnore; +def warn_unreachable_fallthrough_attr : Warning< + "fallthrough annotation in unreachable code">, + InGroup<UnreachableCodeFallthrough>, DefaultIgnore; def note_unreachable_silence : Note< "silence by adding parentheses to mark code as explicitly dead">; +def warn_unreachable_association : Warning< + "due to lvalue conversion of the controlling expression, association of type " + "%0 will never be selected because it is %select{of array type|qualified}1">, + InGroup<UnreachableCodeGenericAssoc>; /// Built-in functions. def ext_implicit_lib_function_decl : ExtWarn< "implicitly declaring library function '%0' with type %1">, InGroup<ImplicitFunctionDeclare>; +def ext_implicit_lib_function_decl_c99 : ExtWarn< + "call to undeclared library function '%0' with type %1; ISO C99 and later " + "do not support implicit function declarations">, + InGroup<ImplicitFunctionDeclare>; def note_include_header_or_declare : Note< "include the header <%0> or explicitly provide a declaration for '%1'">; def note_previous_builtin_declaration : Note<"%0 is a builtin with type %1">; @@ -811,16 +869,47 @@ def warn_builtin_chk_overflow : Warning< InGroup<DiagGroup<"builtin-memcpy-chk-size">>; def warn_fortify_source_overflow - : Warning<warn_builtin_chk_overflow.Text>, InGroup<FortifySource>; + : Warning<warn_builtin_chk_overflow.Summary>, InGroup<FortifySource>; def warn_fortify_source_size_mismatch : Warning< "'%0' size argument is too large; destination buffer has size %1," " but size argument is %2">, InGroup<FortifySource>; -def warn_fortify_source_format_overflow : Warning< +def warn_fortify_strlen_overflow: Warning< + "'%0' will always overflow; destination buffer has size %1," + " but the source string has length %2 (including NUL byte)">, + InGroup<FortifySource>; + +def subst_format_overflow : TextSubstitution< "'%0' will always overflow; destination buffer has size %1," - " but format string expands to at least %2">, + " but format string expands to at least %2">; + +def warn_format_overflow : Warning< + "%sub{subst_format_overflow}0,1,2">, + InGroup<FormatOverflow>; + +def warn_format_overflow_non_kprintf : Warning< + "%sub{subst_format_overflow}0,1,2">, + InGroup<FormatOverflowNonKprintf>; + +def subst_format_truncation: TextSubstitution< + "'%0' will always be truncated; specified size is %1," + " but format string expands to at least %2">; + +def warn_format_truncation: Warning< + "%sub{subst_format_truncation}0,1,2">, + InGroup<FormatTruncation>; + +def warn_format_truncation_non_kprintf: Warning< + "%sub{subst_format_truncation}0,1,2">, + InGroup<FormatTruncationNonKprintf>; + +def warn_fortify_scanf_overflow : Warning< + "'%0' may overflow; destination buffer in argument %1 has size " + "%2, but the corresponding specifier may require size %3">, InGroup<FortifySource>; +def err_function_start_invalid_type: Error< + "argument must be a function">; /// main() // static main() is not an error in C, just in C++. @@ -908,11 +997,14 @@ def warn_pragma_options_align_reset_failed : Warning< InGroup<IgnoredPragmas>; def err_pragma_options_align_mac68k_target_unsupported : Error< "mac68k alignment pragma is not supported on this target">; +def warn_pragma_align_not_xl_compatible : Warning< + "#pragma align(packed) may not be compatible with objects generated with AIX XL C/C++">, + InGroup<AIXCompat>; def warn_pragma_pack_invalid_alignment : Warning< "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">, InGroup<IgnoredPragmas>; def err_pragma_pack_invalid_alignment : Error< - warn_pragma_pack_invalid_alignment.Text>; + warn_pragma_pack_invalid_alignment.Summary>; def warn_pragma_pack_non_default_at_include : Warning< "non-default #pragma pack value changes the alignment of struct or union " "members in the included file">, InGroup<PragmaPackSuspiciousInclude>, @@ -933,7 +1025,8 @@ def warn_pragma_pack_pop_identifier_and_alignment : Warning< def warn_pragma_pop_failed : Warning<"#pragma %0(pop, ...) failed: %1">, InGroup<IgnoredPragmas>; def err_pragma_fc_pp_scope : Error< - "'#pragma float_control push/pop' can only appear at file scope or namespace scope">; + "'#pragma float_control push/pop' can only appear at file or namespace scope " + "or within a language linkage specification">; def err_pragma_fc_noprecise_requires_nofenv : Error< "'#pragma float_control(precise, off)' is illegal when fenv_access is enabled">; def err_pragma_fc_except_requires_precise : Error< @@ -949,12 +1042,22 @@ def warn_cxx_ms_struct : def err_pragma_pack_identifer_not_supported : Error< "specifying an identifier within `#pragma pack` is not supported on this target">; def err_section_conflict : Error<"%0 causes a section type conflict with %1">; +def warn_section_msvc_compat : Warning<"`#pragma const_seg` for section %1 will" + " not apply to %0 due to the presence of a %select{mutable field||non-trivial constructor|non-trivial destructor}2">, + InGroup<IncompatibleMSPragmaSection>; def err_no_base_classes : Error<"invalid use of '__super', %0 has no base classes">; def err_invalid_super_scope : Error<"invalid use of '__super', " "this keyword can only be used inside class or member function scope">; def err_super_in_lambda_unsupported : Error< "use of '__super' inside a lambda is unsupported">; +def err_pragma_expected_file_scope : Error< + "'#pragma %0' can only appear at file scope">; +def err_pragma_alloc_text_c_linkage: Error< + "'#pragma alloc_text' is applicable only to functions with C linkage">; +def err_pragma_alloc_text_not_function: Error< + "'#pragma alloc_text' is applicable only to functions">; + def warn_pragma_unused_undeclared_var : Warning< "undeclared variable %0 used as an argument for '#pragma unused'">, InGroup<IgnoredPragmas>; @@ -1041,7 +1144,7 @@ def warn_protocol_property_mismatch : Warning< "property %select{of type %1|with attribute '%1'|without attribute '%1'|with " "getter %1|with setter %1}0 was selected for synthesis">, InGroup<DiagGroup<"protocol-property-synthesis-ambiguity">>; -def err_protocol_property_mismatch: Error<warn_protocol_property_mismatch.Text>; +def err_protocol_property_mismatch: Error<warn_protocol_property_mismatch.Summary>; def err_undef_interface : Error<"cannot find interface declaration for %0">; def err_category_forward_interface : Error< "cannot define %select{category|class extension}0 for undefined class %1">; @@ -1258,7 +1361,7 @@ def warn_objc_pointer_masking : Warning< "bitmasking for introspection of Objective-C object pointers is strongly " "discouraged">, InGroup<ObjCPointerIntrospect>; -def warn_objc_pointer_masking_performSelector : Warning<warn_objc_pointer_masking.Text>, +def warn_objc_pointer_masking_performSelector : Warning<warn_objc_pointer_masking.Summary>, InGroup<ObjCPointerIntrospectPerformSelector>; def warn_objc_property_default_assign_on_object : Warning< "default property attribute 'assign' not appropriate for object">, @@ -1284,7 +1387,7 @@ def warn_atomic_property_rule : Warning< "with a user defined %select{getter|setter}2">, InGroup<DiagGroup<"atomic-property-with-user-defined-accessor">>; def note_atomic_property_fixup_suggest : Note<"setter and getter must both be " - "synthesized, or both be user defined,or the property must be nonatomic">; + "synthesized, or both be user defined, or the property must be nonatomic">; def err_atomic_property_nontrivial_assign_op : Error< "atomic property of reference type %0 cannot have non-trivial assignment" " operator">; @@ -1462,7 +1565,7 @@ def warn_potentially_direct_selector_expression : Warning< "@selector expression formed with potentially direct selector %0">, InGroup<ObjCPotentiallyDirectSelector>; def warn_strict_potentially_direct_selector_expression : Warning< - warn_potentially_direct_selector_expression.Text>, + warn_potentially_direct_selector_expression.Summary>, InGroup<ObjCStrictPotentiallyDirectSelector>, DefaultIgnore; def err_objc_kindof_nonobject : Error< @@ -1486,12 +1589,36 @@ def err_messaging_class_with_direct_method : Error< // C++ declarations def err_static_assert_expression_is_not_constant : Error< - "static_assert expression is not an integral constant expression">; + "static assertion expression is not an integral constant expression">; def err_constexpr_if_condition_expression_is_not_constant : Error< "constexpr if condition is not a constant expression">; -def err_static_assert_failed : Error<"static_assert failed%select{ %1|}0">; +def err_static_assert_failed : Error<"static assertion failed%select{: %1|}0">; def err_static_assert_requirement_failed : Error< - "static_assert failed due to requirement '%0'%select{ %2|}1">; + "static assertion failed due to requirement '%0'%select{: %2|}1">; +def note_expr_evaluates_to : Note< + "expression evaluates to '%0 %1 %2'">; +def err_static_assert_invalid_message : Error< + "the message in a static assertion must be a string literal or an " + "object with 'data()' and 'size()' member functions">; +def err_static_assert_missing_member_function : Error< + "the message object in this static assertion is missing %select{" + "a 'size()' member function|" + "a 'data()' member function|" + "'data()' and 'size()' member functions}0">; +def err_static_assert_invalid_mem_fn_ret_ty : Error< + "the message in a static assertion must have a '%select{size|data}0()' member " + "function returning an object convertible to '%select{std::size_t|const char *}0'">; +def warn_static_assert_message_constexpr : Warning< + "the message in this static assertion is not a " + "constant expression">, + DefaultError, InGroup<DiagGroup<"invalid-static-assert-message">>; +def err_static_assert_message_constexpr : Error< + "the message in a static assertion must be produced by a " + "constant expression">; + +def warn_consteval_if_always_true : Warning< + "consteval if is always true in an %select{unevaluated|immediate}0 context">, + InGroup<DiagGroup<"redundant-consteval-if">>; def ext_inline_variable : ExtWarn< "inline variables are a C++17 extension">, InGroup<CXX17>; @@ -1504,6 +1631,8 @@ def warn_inline_namespace_reopened_noninline : Warning< InGroup<InlineNamespaceReopenedNoninline>; def err_inline_namespace_mismatch : Error< "non-inline namespace cannot be reopened as inline">; +def err_inline_namespace_std : Error< + "cannot declare the namespace 'std' to be inline">; def err_unexpected_friend : Error< "friends can only be classes or functions">; @@ -1547,6 +1676,8 @@ def err_qualified_friend_def : Error< "friend function definition cannot be qualified with '%0'">; def err_friend_def_in_local_class : Error< "friend function cannot be defined in a local class">; +def err_friend_specialization_def : Error< + "friend function specialization cannot be defined">; def err_friend_not_first_in_declaration : Error< "'friend' must appear first in a non-function declaration">; def err_using_decl_friend : Error< @@ -1600,6 +1731,9 @@ def err_type_defined_in_condition : Error< "%0 cannot be defined in a condition">; def err_type_defined_in_enum : Error< "%0 cannot be defined in an enumeration">; +def ext_type_defined_in_offsetof : Extension< + "defining a type within '%select{__builtin_offsetof|offsetof}0' is a Clang " + "extension">, InGroup<GNUOffsetofExtensions>; def note_pure_virtual_function : Note< "unimplemented pure virtual method %0 in %1">; @@ -1624,8 +1758,7 @@ def warn_weak_vtable : Warning< "emitted in every translation unit">, InGroup<DiagGroup<"weak-vtables">>, DefaultIgnore; def warn_weak_template_vtable : Warning< - "explicit template instantiation %0 will emit a vtable in every " - "translation unit">, + "this warning is no longer in use and will be removed in the next release">, InGroup<DiagGroup<"weak-template-vtables">>, DefaultIgnore; def ext_using_undefined_std : ExtWarn< @@ -1643,37 +1776,32 @@ def err_incomplete_in_exception_spec : Error< def err_sizeless_in_exception_spec : Error< "%select{|reference to }0sizeless type %1 is not allowed " "in exception specification">; -def ext_incomplete_in_exception_spec : ExtWarn<err_incomplete_in_exception_spec.Text>, +def ext_incomplete_in_exception_spec : ExtWarn<err_incomplete_in_exception_spec.Summary>, InGroup<MicrosoftExceptionSpec>; def err_rref_in_exception_spec : Error< "rvalue reference type %0 is not allowed in exception specification">; def err_mismatched_exception_spec : Error< "exception specification in declaration does not match previous declaration">; -def ext_mismatched_exception_spec : ExtWarn<err_mismatched_exception_spec.Text>, +def ext_mismatched_exception_spec : ExtWarn<err_mismatched_exception_spec.Summary>, InGroup<MicrosoftExceptionSpec>; def err_override_exception_spec : Error< "exception specification of overriding function is more lax than " "base version">; -def ext_override_exception_spec : ExtWarn<err_override_exception_spec.Text>, +def ext_override_exception_spec : ExtWarn<err_override_exception_spec.Summary>, InGroup<MicrosoftExceptionSpec>; def err_incompatible_exception_specs : Error< "target exception specification is not superset of source">; def warn_incompatible_exception_specs : Warning< - err_incompatible_exception_specs.Text>, InGroup<IncompatibleExceptionSpec>; + err_incompatible_exception_specs.Summary>, InGroup<IncompatibleExceptionSpec>; def err_deep_exception_specs_differ : Error< "exception specifications of %select{return|argument}0 types differ">; def warn_deep_exception_specs_differ : Warning< - err_deep_exception_specs_differ.Text>, InGroup<IncompatibleExceptionSpec>; + err_deep_exception_specs_differ.Summary>, InGroup<IncompatibleExceptionSpec>; def err_missing_exception_specification : Error< "%0 is missing exception specification '%1'">; def ext_missing_exception_specification : ExtWarn< - err_missing_exception_specification.Text>, + err_missing_exception_specification.Summary>, InGroup<DiagGroup<"missing-exception-spec">>; -def ext_ms_missing_exception_specification : ExtWarn< - err_missing_exception_specification.Text>, - InGroup<MicrosoftExceptionSpec>; -def err_noexcept_needs_constant_expression : Error< - "argument to noexcept specifier must be a constant expression">; def err_exception_spec_not_parsed : Error< "exception specification is not available until end of class definition">; def err_exception_spec_cycle : Error< @@ -1833,7 +1961,7 @@ def err_static_not_bitfield : Error<"static member %0 cannot be a bit-field">; def err_static_out_of_line : Error< "'static' can only be specified inside the class definition">; def ext_static_out_of_line : ExtWarn< - err_static_out_of_line.Text>, + err_static_out_of_line.Summary>, InGroup<MicrosoftTemplate>; def err_storage_class_for_static_member : Error< "static data member definition cannot specify a storage class">; @@ -1961,6 +2089,10 @@ def err_different_return_type_for_overriding_virtual_function : Error< "than the function it overrides}1,2">; def note_overridden_virtual_function : Note< "overridden virtual function is here">; +def err_conflicting_overriding_attributes : Error< + "virtual function %0 has different attributes " + "%diff{($) than the function it overrides (which has $)|" + "than the function it overrides}1,2">; def err_conflicting_overriding_cc_attributes : Error< "virtual function %0 has different calling convention attributes " "%diff{($) than the function it overrides (which has calling convention $)|" @@ -2077,7 +2209,8 @@ def err_init_conversion_failed : Error< "exception object|a member subobject|an array element|a new value|a value|a " "base class|a constructor delegation|a vector element|a block element|a " "block element|a complex element|a lambda capture|a compound literal " - "initializer|a related result|a parameter of CF audited function}0 " + "initializer|a related result|a parameter of CF audited function|a " + "structured binding|a member subobject}0 " "%diff{of type $ with an %select{rvalue|lvalue}2 of type $|" "with an %select{rvalue|lvalue}2 of incompatible type}1,3" "%select{|: different classes%diff{ ($ vs $)|}5,6" @@ -2120,10 +2253,15 @@ def err_init_list_bad_dest_type : Error< def warn_cxx20_compat_aggregate_init_with_ctors : Warning< "aggregate initialization of type %0 with user-declared constructors " "is incompatible with C++20">, DefaultIgnore, InGroup<CXX20Compat>; +def warn_cxx17_compat_aggregate_init_paren_list : Warning< + "aggregate initialization of type %0 from a parenthesized list of values " + "is a C++20 extension">, DefaultIgnore, InGroup<CXX20>; def err_reference_bind_to_bitfield : Error< "%select{non-const|volatile}0 reference cannot bind to " "bit-field%select{| %1}2">; +def err_reference_bind_to_bitfield_in_cce : Error< + "reference cannot bind to bit-field in converted constant expression">; def err_reference_bind_to_vector_element : Error< "%select{non-const|volatile}0 reference cannot bind to vector element">; def err_reference_bind_to_matrix_element : Error< @@ -2138,6 +2276,8 @@ def err_reference_has_multiple_inits : Error< "reference cannot be initialized with multiple values">; def err_init_non_aggr_init_list : Error< "initialization of non-aggregate type %0 with an initializer list">; +def err_designated_init_for_non_aggregate : Error< + "initialization of non-aggregate type %0 with a designated initializer list">; def err_init_reference_member_uninitialized : Error< "reference member of type %0 uninitialized">; def note_uninit_reference_member : Note< @@ -2260,8 +2400,6 @@ def err_auto_variable_cannot_appear_in_own_initializer : Error< def err_binding_cannot_appear_in_own_initializer : Error< "binding %0 cannot appear in the initializer of its own " "decomposition declaration">; -def err_illegal_decl_array_of_auto : Error< - "'%0' declared as array of %1">; def err_new_array_of_auto : Error< "cannot allocate array of 'auto'">; def err_auto_not_allowed : Error< @@ -2279,7 +2417,9 @@ def err_auto_not_allowed : Error< "|in conversion function type|here|in lambda parameter" "|in type allocated by 'new'|in K&R-style function parameter" "|in template parameter|in friend declaration|in function prototype that is " - "not a function declaration|in requires expression parameter}1">; + "not a function declaration|in requires expression parameter" + "|in array declaration" + "|in declaration of conversion function template}1">; def err_dependent_deduced_tst : Error< "typename specifier refers to " "%select{class template|function template|variable template|alias template|" @@ -2301,13 +2441,23 @@ def ext_auto_new_list_init : Extension< "type %0 to use list-initialization">, InGroup<CXX17>; def err_auto_var_init_no_expression : Error< "initializer for variable %0 with type %1 is empty">; +def err_auto_expr_init_no_expression : Error< + "initializer for functional-style cast to %0 is empty">; def err_auto_var_init_multiple_expressions : Error< "initializer for variable %0 with type %1 contains multiple expressions">; +def err_auto_expr_init_multiple_expressions : Error< + "initializer for functional-style cast to %0 contains multiple expressions">; def err_auto_var_init_paren_braces : Error< "cannot deduce type for variable %1 with type %2 from " "%select{parenthesized|nested}0 initializer list">; def err_auto_new_ctor_multiple_expressions : Error< "new expression for type %0 contains multiple constructor arguments">; +def err_auto_expr_init_paren_braces : Error< + "cannot deduce actual type for %1 from " + "%select{parenthesized|nested}0 initializer list">; +def warn_cxx20_compat_auto_expr : Warning< + "'auto' as a functional-style cast is incompatible with C++ standards " + "before C++23">, InGroup<CXXPre23Compat>, DefaultIgnore; def err_auto_missing_trailing_return : Error< "'auto' return without trailing return type; deduced return types are a " "C++14 extension">; @@ -2321,6 +2471,8 @@ def err_auto_var_deduction_failure : Error< "variable %0 with type %1 has incompatible initializer of type %2">; def err_auto_var_deduction_failure_from_init_list : Error< "cannot deduce actual type for variable %0 with type %1 from initializer list">; +def err_auto_expr_deduction_failure : Error< + "functional-style cast to %0 has incompatible initializer of type %1">; def err_auto_new_deduction_failure : Error< "new expression for type %0 has incompatible constructor argument of type %1">; def err_auto_inconsistent_deduction : Error< @@ -2340,7 +2492,8 @@ def err_implied_std_initializer_list_not_found : Error< def err_malformed_std_initializer_list : Error< "std::initializer_list must be a class template with a single type parameter">; def err_auto_init_list_from_c : Error< - "cannot use __auto_type with initializer list in C">; + "cannot use %select{'auto'|<ERROR>|'__auto_type'}0 with " + "%select{initializer list|array}1 in C">; def err_auto_bitfield : Error< "cannot pass bit-field as __auto_type initializer in C">; @@ -2486,7 +2639,7 @@ def err_final_function_overridden : Error< // C++11 scoped enumerations def err_enum_invalid_underlying : Error< - "non-integral type %0 is an invalid underlying type">; + "%select{non-integral type %0|%0}1 is an invalid underlying type">; def err_enumerator_too_large : Error< "enumerator value is not representable in the underlying type %0">; def ext_enumerator_too_large : Extension< @@ -2586,10 +2739,28 @@ def warn_cxx14_compat_constexpr_not_const : Warning< "in C++14; add 'const' to avoid a change in behavior">, InGroup<DiagGroup<"constexpr-not-const">>; def err_invalid_consteval_take_address : Error< - "cannot take address of consteval function %0 outside" + "cannot take address of %select{immediate|consteval}2 " + "%select{function|call operator of}1 %0 outside" " of an immediate invocation">; def err_invalid_consteval_call : Error< - "call to consteval function %q0 is not a constant expression">; + "call to %select{immediate|consteval}1 function " + "%q0 is not a constant expression">; + +def err_immediate_function_used_before_definition : Error< + "immediate function %0 used before it is defined">; + +def note_immediate_function_reason : Note< + "%0 is an immediate %select{function|constructor}5 because " + "%select{its body|the%select{| default}7 initializer of %8}6 " + "%select{evaluates the address of %select{an immediate|a consteval}2 " + "function %1|contains a call to %select{an immediate|a consteval}2 " + "%select{function|constructor}4 %1 and that call is not a constant " + "expression}3">; + +def note_invalid_consteval_initializer : Note< + "in the default initializer of %0">; +def note_invalid_consteval_initializer_here : Note< + "initialized here %0">; def err_invalid_consteval_decl_kind : Error< "%0 cannot be declared consteval">; def err_invalid_constexpr : Error< @@ -2598,7 +2769,7 @@ def err_invalid_constexpr : Error< def err_invalid_constexpr_member : Error<"non-static data member cannot be " "constexpr%select{; did you intend to make it %select{const|static}0?|}1">; def err_constexpr_tag : Error< - "%select{class|struct|interface|union|enum}0 " + "%select{class|struct|interface|union|enum|enum class|enum struct}0 " "cannot be marked %sub{select_constexpr_spec_kind}1">; def err_constexpr_dtor : Error< "destructor cannot be declared %sub{select_constexpr_spec_kind}0">; @@ -2658,6 +2829,13 @@ def warn_cxx17_compat_constexpr_body_invalid_stmt : Warning< "use of this statement in a constexpr %select{function|constructor}0 " "is incompatible with C++ standards before C++20">, InGroup<CXXPre20Compat>, DefaultIgnore; +def ext_constexpr_body_invalid_stmt_cxx23 : ExtWarn< + "use of this statement in a constexpr %select{function|constructor}0 " + "is a C++23 extension">, InGroup<CXX23>; +def warn_cxx20_compat_constexpr_body_invalid_stmt : Warning< + "use of this statement in a constexpr %select{function|constructor}0 " + "is incompatible with C++ standards before C++23">, + InGroup<CXXPre23Compat>, DefaultIgnore; def ext_constexpr_type_definition : ExtWarn< "type definition in a constexpr %select{function|constructor}0 " "is a C++14 extension">, InGroup<CXX14>; @@ -2675,12 +2853,18 @@ def warn_cxx11_compat_constexpr_local_var : Warning< "variable declaration in a constexpr %select{function|constructor}0 " "is incompatible with C++ standards before C++14">, InGroup<CXXPre14Compat>, DefaultIgnore; -def err_constexpr_local_var_static : Error< - "%select{static|thread_local}1 variable not permitted in a constexpr " - "%select{function|constructor}0">; +def ext_constexpr_static_var : ExtWarn< + "definition of a %select{static|thread_local}1 variable " + "in a constexpr %select{function|constructor}0 " + "is a C++23 extension">, InGroup<CXX23>; +def warn_cxx20_compat_constexpr_var : Warning< + "definition of a %select{static variable|thread_local variable|variable " + "of non-literal type}1 in a constexpr %select{function|constructor}0 " + "is incompatible with C++ standards before C++23">, + InGroup<CXXPre23Compat>, DefaultIgnore; def err_constexpr_local_var_non_literal_type : Error< "variable of non-literal type %1 cannot be defined in a constexpr " - "%select{function|constructor}0">; + "%select{function|constructor}0 before C++23">; def ext_constexpr_local_var_no_init : ExtWarn< "uninitialized variable in a constexpr %select{function|constructor}0 " "is a C++20 extension">, InGroup<CXX20>; @@ -2712,6 +2896,8 @@ def warn_cxx11_compat_constexpr_body_multiple_return : Warning< InGroup<CXXPre14Compat>, DefaultIgnore; def note_constexpr_body_previous_return : Note< "previous return statement is here">; +def err_ms_constexpr_cannot_be_applied : Error< + "attribute 'msvc::constexpr' cannot be applied to the %select{constexpr|consteval|virtual}0 function %1">; // C++20 function try blocks in constexpr def ext_constexpr_function_try_block_cxx20 : ExtWarn< @@ -2780,6 +2966,8 @@ def err_template_arg_list_constraints_not_satisfied : Error< "template template parameter|template}0 %1%2">; 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< @@ -2792,6 +2980,8 @@ def err_constrained_virtual_method : Error< "virtual function cannot have a requires clause">; def err_trailing_requires_clause_on_deduction_guide : Error< "deduction guide cannot have a requires clause">; +def err_constrained_non_templated_function + : Error<"non-templated function cannot have a requires clause">; def err_reference_to_function_with_unsatisfied_constraints : Error< "invalid reference to function %0: constraints not satisfied">; def err_requires_expr_local_parameter_default_argument : Error< @@ -2817,7 +3007,7 @@ def note_type_requirement_substitution_error : Note< def note_type_requirement_unknown_substitution_error : Note< "%select{and|because}0 '%1' would be invalid">; def note_nested_requirement_substitution_error : Note< - "%select{and|because}0 '%1' would be invalid: %2">; + "%select{and|because}0 '%1' would be invalid%2">; def note_nested_requirement_unknown_substitution_error : Note< "%select{and|because}0 '%1' would be invalid">; def note_ambiguous_atomic_constraints : Note< @@ -2872,11 +3062,20 @@ def warn_auto_var_is_id : Warning< InGroup<DiagGroup<"auto-var-id">>; // Attributes -def warn_nomerge_attribute_ignored_in_stmt: Warning< +def warn_attribute_ignored_no_calls_in_stmt: Warning< "%0 attribute is ignored because there exists no call expression inside the " "statement">, InGroup<IgnoredAttributes>; +def warn_attribute_ignored_non_function_pointer: Warning< + "%0 attribute is ignored because %1 is not a function pointer">, + InGroup<IgnoredAttributes>; + +def warn_function_attribute_ignored_in_stmt : Warning< + "attribute is ignored on this statement as it only applies to functions; " + "use '%0' on statements">, + InGroup<IgnoredAttributes>; + def err_musttail_needs_trivial_args : Error< "tail call requires that the return value, all parameters, and any " "temporaries created by the expression are trivially destructible">; @@ -2922,22 +3121,38 @@ def err_musttail_scope : Error< "cannot perform a tail call from this return statement">; def err_musttail_no_variadic : Error< "%0 attribute may not be used with variadic functions">; +def err_musttail_no_return : Error< + "%0 attribute may not be used with no-return-attribute functions">; def err_nsobject_attribute : Error< "'NSObject' attribute is for pointer types only">; def err_attributes_are_not_compatible : Error< - "%0 and %1 attributes are not compatible">; + "%0 and %1%select{ attributes|}2 are not compatible">; def err_attribute_invalid_argument : Error< "%select{a reference type|an array type|a non-vector or " "non-vectorizable scalar type}0 is an invalid argument to attribute %1">; def err_attribute_wrong_number_arguments : Error< "%0 attribute %plural{0:takes no arguments|1:takes one argument|" ":requires exactly %1 arguments}1">; +def err_attribute_wrong_number_arguments_for : Error < + "%0 attribute references function %1, which %plural{0:takes no arguments|1:takes one argument|" + ":takes exactly %2 arguments}2">; +def err_attribute_bounds_for_function : Error< + "%0 attribute references parameter %1, but the function %2 has only %3 parameters">; +def err_attribute_no_member_function : Error< + "%0 attribute cannot be applied to non-static member functions">; +def err_attribute_parameter_types : Error< + "%0 attribute parameter types do not match: parameter %1 of function %2 has type %3, " + "but parameter %4 of function %5 has type %6">; + def err_attribute_too_many_arguments : Error< "%0 attribute takes no more than %1 argument%s1">; def err_attribute_too_few_arguments : Error< "%0 attribute takes at least %1 argument%s1">; def err_attribute_invalid_vector_type : Error<"invalid vector element type %0">; +def err_attribute_invalid_bitint_vector_type : Error< + "'_BitInt' vector element width must be %select{a power of 2|" + "at least as wide as 'CHAR_BIT'}0">; def err_attribute_invalid_matrix_type : Error<"invalid matrix element type %0">; def err_attribute_bad_neon_vector_size : Error< "Neon vector size must be 64 or 128 bits">; @@ -2949,21 +3164,48 @@ def err_attribute_bad_sve_vector_size : Error< def err_attribute_arm_feature_sve_bits_unsupported : Error< "%0 is only supported when '-msve-vector-bits=<bits>' is specified with a " "value of 128, 256, 512, 1024 or 2048.">; +def warn_attribute_arm_sm_incompat_builtin : Warning< + "builtin call has undefined behaviour when called from a %0 function">, + InGroup<DiagGroup<"undefined-arm-streaming">>; +def warn_attribute_arm_za_builtin_no_za_state : Warning< + "builtin call is not valid when calling from a function without active ZA state">, + InGroup<DiagGroup<"undefined-arm-za">>; +def warn_attribute_arm_zt0_builtin_no_zt0_state : Warning< + "builtin call is not valid when calling from a function without active ZT0 state">, + InGroup<DiagGroup<"undefined-arm-zt0">>; +def err_sve_vector_in_non_sve_target : Error< + "SVE vector type %0 cannot be used in a target without sve">; +def err_attribute_riscv_rvv_bits_unsupported : Error< + "%0 is only supported when '-mrvv-vector-bits=<bits>' is specified with a " + "value of \"zvl\" or a power 2 in the range [64,65536]">; +def err_attribute_bad_rvv_vector_size : Error< + "invalid RVV vector size '%0', expected size is '%1' based on LMUL of type " + "and '-mrvv-vector-bits'">; +def err_attribute_invalid_rvv_type : Error< + "%0 attribute applied to non-RVV type %1">; def err_attribute_requires_positive_integer : Error< "%0 attribute requires a %select{positive|non-negative}1 " "integral compile time constant expression">; def err_attribute_requires_opencl_version : Error< - "%0 attribute requires OpenCL version %1%select{| or above}2">; + "attribute %0 is supported in the OpenCL version %1%select{| onwards}2">; def err_invalid_branch_protection_spec : Error< "invalid or misplaced branch protection specification '%0'">; +def warn_unsupported_branch_protection_spec : Warning< + "unsupported branch protection specification '%0'">, InGroup<BranchProtection>; + def warn_unsupported_target_attribute - : Warning<"%select{unsupported|duplicate|unknown}0%select{| architecture|" - " tune CPU}1 '%2' in the 'target' attribute string; 'target' " + : Warning<"%select{unsupported|duplicate|unknown}0%select{| CPU|" + " tune CPU}1 '%2' in the '%select{target|target_clones|target_version}3' " + "attribute string; '%select{target|target_clones|target_version}3' " "attribute ignored">, InGroup<IgnoredAttributes>; def err_attribute_unsupported : Error<"%0 attribute is not supported on targets missing %1;" " specify an appropriate -march= or -mcpu=">; +def err_duplicate_target_attribute + : Error<"%select{unsupported|duplicate|unknown}0%select{| CPU|" + " tune CPU}1 '%2' in the '%select{target|target_clones|target_version}3' " + "attribute string; ">; // The err_*_attribute_argument_not_int are separate because they're used by // VerifyIntegerConstantExpression. def err_aligned_attribute_argument_not_int : Error< @@ -2971,8 +3213,9 @@ def err_aligned_attribute_argument_not_int : Error< def err_align_value_attribute_argument_not_int : Error< "'align_value' attribute requires integer constant">; def err_alignas_attribute_wrong_decl_type : Error< - "%0 attribute cannot be applied to a %select{function parameter|" - "variable with 'register' storage class|'catch' variable|bit-field}1">; + "%0 attribute cannot be applied to %select{a function parameter|" + "a variable with 'register' storage class|a 'catch' variable|a bit-field|" + "an enumeration}1">; def err_alignas_missing_on_definition : Error< "%0 must be specified on definition if it is specified on any declaration">; def note_alignas_on_declaration : Note<"declared with %0 attribute here">; @@ -2980,11 +3223,13 @@ def err_alignas_mismatch : Error< "redeclaration has different alignment requirement (%1 vs %0)">; def err_alignas_underaligned : Error< "requested alignment is less than minimum alignment of %1 for type %0">; +def warn_aligned_attr_underaligned : Warning<err_alignas_underaligned.Summary>, + InGroup<IgnoredAttributes>; def err_attribute_sizeless_type : Error< "%0 attribute cannot be applied to sizeless type %1">; def err_attribute_argument_n_type : Error< "%0 attribute requires parameter %1 to be %select{int or bool|an integer " - "constant|a string|an identifier|a constant expression}2">; + "constant|a string|an identifier|a constant expression|a builtin function}2">; def err_attribute_argument_type : Error< "%0 attribute requires %select{int or bool|an integer " "constant|a string|an identifier}1">; @@ -3002,7 +3247,7 @@ def note_previous_uuid : Note<"previous uuid specified here">; def warn_attribute_pointers_only : Warning< "%0 attribute only applies to%select{| constant}1 pointer arguments">, InGroup<IgnoredAttributes>; -def err_attribute_pointers_only : Error<warn_attribute_pointers_only.Text>; +def err_attribute_pointers_only : Error<warn_attribute_pointers_only.Summary>; def err_attribute_integers_only : Error< "%0 attribute argument may only refer to a function parameter of integer " "type">; @@ -3027,9 +3272,7 @@ def note_ownership_returns_index_mismatch : Note< "declared with index %0 here">; def err_format_strftime_third_parameter : Error< "strftime format attribute requires 3rd parameter to be 0">; -def err_format_attribute_requires_variadic : Error< - "format attribute requires variadic function">; -def err_format_attribute_not : Error<"format argument not %0">; +def err_format_attribute_not : Error<"format argument not a string type">; def err_format_attribute_result_not : Error<"function does not return %0">; def err_format_attribute_implicit_this_format_string : Error< "format attribute cannot specify the implicit this argument as the format " @@ -3054,10 +3297,11 @@ def err_attribute_invalid_size : Error< "vector size not an integral multiple of component size">; def err_attribute_zero_size : Error<"zero %0 size">; def err_attribute_size_too_large : Error<"%0 size too large">; -def err_typecheck_sve_ambiguous : Error< - "cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (%0 and %1)">; -def err_typecheck_sve_gnu_ambiguous : Error< - "cannot combine GNU and SVE vectors in expression, result is ambiguous (%0 and %1)">; +def err_typecheck_sve_rvv_ambiguous : Error< + "cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors " + "in expression, result is ambiguous (%1 and %2)">; +def err_typecheck_sve_rvv_gnu_ambiguous : Error< + "cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)">; def err_typecheck_vector_not_convertable_implict_truncation : Error< "cannot convert between %select{scalar|vector}0 type %1 and vector type" " %2 as implicit conversion would cause truncation">; @@ -3186,6 +3430,8 @@ def warn_objc_redundant_literal_use : Warning< def err_attr_tlsmodel_arg : Error<"tls_model must be \"global-dynamic\", " "\"local-dynamic\", \"initial-exec\" or \"local-exec\"">; +def err_attr_codemodel_arg : Error<"code model '%0' is not supported on this target">; + def err_aix_attr_unsupported_tls_model : Error<"TLS model '%0' is not yet supported on AIX">; def err_tls_var_aligned_over_maximum : Error< @@ -3240,7 +3486,7 @@ def err_alignment_too_big : Error< def err_alignment_not_power_of_two : Error< "requested alignment is not a power of 2">; def warn_alignment_not_power_of_two : Warning< - err_alignment_not_power_of_two.Text>, + err_alignment_not_power_of_two.Summary>, InGroup<DiagGroup<"non-power-of-two-alignment">>; def err_alignment_dependent_typedef_name : Error< "requested alignment is dependent but declaration is not dependent">; @@ -3255,9 +3501,11 @@ def warn_assume_aligned_too_great "alignment assumed">, InGroup<DiagGroup<"builtin-assume-aligned-alignment">>; def warn_not_xl_compatible - : Warning<"requesting an alignment of 16 bytes or greater for struct" - " members is not binary compatible with AIX XL 16.1 and older">, + : Warning<"alignment of 16 bytes for a struct member is not binary " + "compatible with IBM XL C/C++ for AIX 16.1.0 or older">, InGroup<AIXCompat>; +def note_misaligned_member_used_here : Note< + "passing byval argument %0 with potentially incompatible alignment here">; def warn_redeclaration_without_attribute_prev_attribute_ignored : Warning< "%q0 redeclared without %1 attribute: previous %1 ignored">, InGroup<MicrosoftInconsistentDllImport>; @@ -3267,8 +3515,6 @@ def warn_redeclaration_without_import_attribute : Warning< def warn_dllimport_dropped_from_inline_function : Warning< "%q0 redeclared inline; %1 attribute ignored">, InGroup<IgnoredAttributes>; -def warn_attribute_ignored : Warning<"%0 attribute ignored">, - InGroup<IgnoredAttributes>; def warn_nothrow_attribute_ignored : Warning<"'nothrow' attribute conflicts with" " exception specification; attribute ignored">, InGroup<IgnoredAttributes>; @@ -3298,19 +3544,26 @@ def warn_attribute_has_no_effect_on_infinite_loop : Warning< InGroup<IgnoredAttributes>; def note_attribute_has_no_effect_on_infinite_loop_here : Note< "annotating the infinite loop here">; -def warn_attribute_has_no_effect_on_if_constexpr : Warning< - "attribute %0 has no effect when annotating an 'if constexpr' statement">, +def warn_attribute_has_no_effect_on_compile_time_if : Warning< + "attribute %0 has no effect when annotating an 'if %select{constexpr|consteval}1' statement">, InGroup<IgnoredAttributes>; -def note_attribute_has_no_effect_on_if_constexpr_here : Note< - "annotating the 'if constexpr' statement here">; +def note_attribute_has_no_effect_on_compile_time_if_here : Note< + "annotating the 'if %select{constexpr|consteval}0' statement here">; def err_decl_attribute_invalid_on_stmt : Error< - "%0 attribute cannot be applied to a statement">; -def err_stmt_attribute_invalid_on_decl : Error< - "%0 attribute cannot be applied to a declaration">; + "%0%select{ attribute|}1 cannot be applied to a statement">; +def err_attribute_invalid_on_decl : Error< + "%0%select{ attribute|}1 cannot be applied to a declaration">; +def warn_type_attribute_deprecated_on_decl : Warning< + "applying attribute %0 to a declaration is deprecated; apply it to the type instead">, + InGroup<DeprecatedAttributes>; def warn_declspec_attribute_ignored : Warning< "attribute %0 is ignored, place it after " - "\"%select{class|struct|interface|union|enum}1\" to apply attribute to " + "\"%select{class|struct|interface|union|enum|enum class|enum struct}1\" to apply attribute to " "type declaration">, InGroup<IgnoredAttributes>; +def err_declspec_keyword_has_no_effect : Error< + "%0 cannot appear here, place it after " + "\"%select{class|struct|interface|union|enum}1\" to apply it to the " + "type declaration">; def warn_attribute_precede_definition : Warning< "attribute declaration must precede definition">, InGroup<IgnoredAttributes>; @@ -3371,6 +3624,8 @@ def warn_attribute_dll_redeclaration : Warning< InGroup<DiagGroup<"dll-attribute-on-redeclaration">>; def err_attribute_dllimport_function_definition : Error< "dllimport cannot be applied to non-inline function definition">; +def err_attribute_dllimport_function_specialization_definition : Error< + "cannot define non-inline dllimport template specialization">; def err_attribute_dll_deleted : Error< "attribute %q0 cannot be applied to a deleted function">; def err_attribute_dllimport_data_definition : Error< @@ -3382,7 +3637,7 @@ def warn_attribute_dllimport_static_field_definition : Warning< InGroup<DiagGroup<"dllimport-static-field-def">>; def warn_attribute_dllexport_explicit_instantiation_decl : Warning< "explicit instantiation declaration should not be 'dllexport'">, - InGroup<DiagGroup<"dllexport-explicit-instantiation-decl">>; + InGroup<DllexportExplicitInstantiationDecl>; def warn_attribute_dllexport_explicit_instantiation_def : Warning< "'dllexport' attribute ignored on explicit instantiation definition">, InGroup<IgnoredAttributes>; @@ -3407,11 +3662,11 @@ def err_attribute_weakref_without_alias : Error< def err_alias_not_supported_on_darwin : Error < "aliases are not supported on darwin">; def warn_attribute_wrong_decl_type_str : Warning< - "%0 attribute only applies to %1">, InGroup<IgnoredAttributes>; + "%0%select{ attribute|}1 only applies to %2">, InGroup<IgnoredAttributes>; def err_attribute_wrong_decl_type_str : Error< - warn_attribute_wrong_decl_type_str.Text>; + warn_attribute_wrong_decl_type_str.Summary>; def warn_attribute_wrong_decl_type : Warning< - "%0 attribute only applies to %select{" + "%0%select{ attribute|}1 only applies to %select{" "functions" "|unions" "|variables and functions" @@ -3424,13 +3679,15 @@ def warn_attribute_wrong_decl_type : Warning< "|types and namespaces" "|variables, functions and classes" "|kernel functions" - "|non-K&R-style functions}1">, + "|non-K&R-style functions}2">, InGroup<IgnoredAttributes>; -def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>; +def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Summary>; def warn_type_attribute_wrong_type : Warning< "'%0' only applies to %select{function|pointer|" "Objective-C object or block pointer}1 types; type here is %2">, InGroup<IgnoredAttributes>; +def err_type_attribute_wrong_type : Error< + warn_type_attribute_wrong_type.Summary>; def warn_incomplete_encoded_type : Warning< "encoding of %0 type is incomplete because %1 component has unknown encoding">, InGroup<DiagGroup<"encode-type">>; @@ -3446,6 +3703,32 @@ def err_attribute_vecreturn_only_vector_member : Error< "the vecreturn attribute can only be used on a class or structure with one member, which must be a vector">; def err_attribute_vecreturn_only_pod_record : Error< "the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)">; +def err_sme_attr_mismatch : Error< + "function declared %0 was previously declared %1, which has different SME function attributes">; +def err_sme_call_in_non_sme_target : Error< + "call to a streaming function requires 'sme'">; +def err_sme_za_call_no_za_state : Error< + "call to a shared ZA function requires the caller to have ZA state">; +def err_sme_zt0_call_no_zt0_state : Error< + "call to a shared ZT0 function requires the caller to have ZT0 state">; +def err_sme_unimplemented_za_save_restore : Error< + "call to a function that shares state other than 'za' from a " + "function that has live 'za' state requires a spill/fill of ZA, which is not yet " + "implemented">; +def note_sme_use_preserves_za : Note< + "add '__arm_preserves(\"za\")' to the callee if it preserves ZA">; +def err_sme_definition_using_sm_in_non_sme_target : Error< + "function executed in streaming-SVE mode requires 'sme'">; +def err_sme_definition_using_za_in_non_sme_target : Error< + "function using ZA state requires 'sme'">; +def err_sme_definition_using_zt0_in_non_sme2_target : Error< + "function using ZT0 state requires 'sme2'">; +def err_conflicting_attributes_arm_state : Error< + "conflicting attributes for state '%0'">; +def err_unknown_arm_state : Error< + "unknown state '%0'">; +def err_missing_arm_state : Error< + "missing state for %0">; def err_cconv_change : Error< "function declared '%0' here was previously declared " "%select{'%2'|without calling convention}1">; @@ -3458,11 +3741,11 @@ def warn_cconv_unsupported : Warning< "|on builtin function" "}1">, InGroup<IgnoredAttributes>; -def error_cconv_unsupported : Error<warn_cconv_unsupported.Text>; +def error_cconv_unsupported : Error<warn_cconv_unsupported.Summary>; def err_cconv_knr : Error< "function with no prototype cannot use the %0 calling convention">; def warn_cconv_knr : Warning< - err_cconv_knr.Text>, + err_cconv_knr.Summary>, InGroup<DiagGroup<"missing-prototype-for-cc">>; def err_cconv_varargs : Error< "variadic function cannot use %0 calling convention">; @@ -3481,9 +3764,7 @@ def err_invalid_pcs : Error<"invalid PCS type">; def warn_attribute_not_on_decl : Warning< "%0 attribute ignored when parsing type">, InGroup<IgnoredAttributes>; def err_base_specifier_attribute : Error< - "%0 attribute cannot be applied to a base specifier">; -def err_invalid_attribute_on_virtual_function : Error< - "%0 attribute cannot be applied to virtual functions">; + "%0%select{ attribute|}1 cannot be applied to a base specifier">; def warn_declspec_allocator_nonpointer : Warning< "ignoring __declspec(allocator) because the function return type %0 is not " "a pointer or reference type">, InGroup<IgnoredAttributes>; @@ -3532,12 +3813,15 @@ def warn_availability_swift_unavailable_deprecated_only : Warning< InGroup<Availability>; def note_protocol_method : Note< "protocol method is here">; +def warn_availability_fuchsia_unavailable_minor : Warning< + "Fuchsia API Level prohibits specifying a minor or sub-minor version">, + InGroup<Availability>; def warn_unguarded_availability : Warning<"%0 is only available on %1 %2 or newer">, InGroup<UnguardedAvailability>, DefaultIgnore; def warn_unguarded_availability_new : - Warning<warn_unguarded_availability.Text>, + Warning<warn_unguarded_availability.Summary>, InGroup<UnguardedAvailabilityNew>; def note_decl_unguarded_availability_silence : Note< "annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning">; @@ -3641,7 +3925,7 @@ def warn_fun_requires_negative_cap : Warning< "calling function %0 requires negative capability '%1'">, InGroup<ThreadSafetyAnalysis>, DefaultIgnore; -// Thread safety warnings on pass by reference +// Thread safety warnings on pass/return by reference def warn_guarded_pass_by_reference : Warning< "passing variable %1 by reference requires holding %0 " "%select{'%2'|'%2' exclusively}3">, @@ -3650,6 +3934,14 @@ def warn_pt_guarded_pass_by_reference : Warning< "passing the value that %1 points to by reference requires holding %0 " "%select{'%2'|'%2' exclusively}3">, InGroup<ThreadSafetyReference>, DefaultIgnore; +def warn_guarded_return_by_reference : Warning< + "returning variable %1 by reference requires holding %0 " + "%select{'%2'|'%2' exclusively}3">, + InGroup<ThreadSafetyReferenceReturn>, DefaultIgnore; +def warn_pt_guarded_return_by_reference : Warning< + "returning the value that %1 points to by reference requires holding %0 " + "%select{'%2'|'%2' exclusively}3">, + InGroup<ThreadSafetyReferenceReturn>, DefaultIgnore; // Imprecise thread safety warnings def warn_variable_requires_lock : Warning< @@ -3666,13 +3958,13 @@ def warn_fun_requires_lock : Warning< // Precise thread safety warnings def warn_variable_requires_lock_precise : - Warning<warn_variable_requires_lock.Text>, + Warning<warn_variable_requires_lock.Summary>, InGroup<ThreadSafetyPrecise>, DefaultIgnore; def warn_var_deref_requires_lock_precise : - Warning<warn_var_deref_requires_lock.Text>, + Warning<warn_var_deref_requires_lock.Summary>, InGroup<ThreadSafetyPrecise>, DefaultIgnore; def warn_fun_requires_lock_precise : - Warning<warn_fun_requires_lock.Text>, + Warning<warn_fun_requires_lock.Summary>, InGroup<ThreadSafetyPrecise>, DefaultIgnore; def note_found_mutex_near_match : Note<"found near match '%0'">; @@ -3754,6 +4046,9 @@ def warn_impcast_integer_64_32 : Warning< def warn_impcast_integer_precision_constant : Warning< "implicit conversion from %2 to %3 changes value from %0 to %1">, InGroup<ConstantConversion>; +def warn_impcast_single_bit_bitield_precision_constant : Warning< + "implicit truncation from %2 to a one-bit wide bit-field changes value from " + "%0 to %1">, InGroup<SingleBitBitFieldConstantConversion>; def warn_impcast_bitfield_precision_constant : Warning< "implicit truncation from %2 to bit-field changes value from %0 to %1">, InGroup<BitFieldConstantConversion>; @@ -3897,7 +4192,8 @@ def warn_cast_align : Warning< "cast from %0 to %1 increases required alignment from %2 to %3">, InGroup<CastAlign>, DefaultIgnore; def warn_old_style_cast : Warning< - "use of old-style cast">, InGroup<OldStyleCast>, DefaultIgnore; + "use of old-style cast">, InGroup<OldStyleCast>, DefaultIgnore, + SuppressInSystemMacro; // Separate between casts to void* and non-void* pointers. // Some APIs use (abuse) void* for something like a user context, @@ -3914,13 +4210,13 @@ def warn_pointer_to_int_cast : Warning< "cast to smaller integer type %1 from %0">, InGroup<PointerToIntCast>; def warn_pointer_to_enum_cast : Warning< - warn_pointer_to_int_cast.Text>, + warn_pointer_to_int_cast.Summary>, InGroup<PointerToEnumCast>; def warn_void_pointer_to_int_cast : Warning< "cast to smaller integer type %1 from %0">, InGroup<VoidPointerToIntCast>; def warn_void_pointer_to_enum_cast : Warning< - warn_void_pointer_to_int_cast.Text>, + warn_void_pointer_to_int_cast.Summary>, InGroup<VoidPointerToEnumCast>; def warn_attribute_ignored_for_field_of_type : Warning< @@ -3956,6 +4252,9 @@ def warn_transparent_union_attribute_zero_fields : Warning< def warn_attribute_type_not_supported : Warning< "%0 attribute argument not supported: %1">, InGroup<IgnoredAttributes>; +def warn_attribute_type_not_supported_global : Warning< + "%0 attribute argument '%1' not supported on a global variable">, + InGroup<IgnoredAttributes>; def warn_attribute_unknown_visibility : Warning<"unknown visibility %0">, InGroup<IgnoredAttributes>; def warn_attribute_protected_visibility : @@ -3981,6 +4280,9 @@ def warn_vector_mode_deprecated : Warning< "specifying vector types with the 'mode' attribute is deprecated; " "use the 'vector_size' attribute instead">, InGroup<DeprecatedAttributes>; +def warn_deprecated_noreturn_spelling : Warning< + "the '[[_Noreturn]]' attribute spelling is deprecated in C23; use " + "'[[noreturn]]' instead">, InGroup<DeprecatedAttributes>; def err_complex_mode_vector_type : Error< "type of machine mode does not support base vector types">; def err_enum_mode_vector_type : Error< @@ -3991,6 +4293,10 @@ def warn_attribute_nonnull_no_pointers : Warning< def warn_attribute_nonnull_parm_no_args : Warning< "'nonnull' attribute when used on parameters takes no arguments">, InGroup<IgnoredAttributes>; +def warn_function_stmt_attribute_precedence : Warning< + "statement attribute %0 has higher precedence than function attribute " + "'%select{always_inline|flatten|noinline}1'">, + InGroup<IgnoredAttributes>; def note_declared_nonnull : Note< "declared %select{'returns_nonnull'|'nonnull'}0 here">; def warn_attribute_sentinel_named_arguments : Warning< @@ -4028,6 +4334,9 @@ def err_attribute_not_supported_on_arch def warn_gcc_ignores_type_attr : Warning< "GCC does not allow the %0 attribute to be written on a type">, InGroup<GccCompat>; +def warn_gcc_requires_variadic_function : Warning< + "GCC requires a function with the %0 attribute to be variadic">, + InGroup<GccCompat>; // Clang-Specific Attributes def warn_attribute_iboutlet : Warning< @@ -4084,7 +4393,7 @@ def err_attribute_preferred_name_arg_invalid : Error< "argument %0 to 'preferred_name' attribute is not a typedef for " "a specialization of %1">; def err_attribute_builtin_alias : Error< - "%0 attribute can only be applied to a ARM or RISC-V builtin">; + "%0 attribute can only be applied to a ARM, HLSL or RISC-V builtin">; // called-once attribute diagnostics. def err_called_once_attribute_wrong_type : Error< @@ -4256,14 +4565,15 @@ def err_void_param_qualified : Error< "'void' as parameter must not have type qualifiers">; def err_ident_list_in_fn_declaration : Error< "a parameter list without types is only allowed in a function definition">; -def ext_param_not_declared : Extension< - "parameter %0 was not declared, defaulting to type 'int'">; +def ext_param_not_declared : ExtWarn< + "parameter %0 was not declared, defaults to 'int'; ISO C99 and later do not " + "support implicit int">, InGroup<ImplicitInt>; def err_param_default_argument : Error< "C does not support default arguments">; def err_param_default_argument_redefinition : Error< "redefinition of default argument">; def ext_param_default_argument_redefinition : ExtWarn< - err_param_default_argument_redefinition.Text>, + err_param_default_argument_redefinition.Summary>, InGroup<MicrosoftDefaultArgRedefinition>; def err_param_default_argument_missing : Error< "missing default argument on parameter">; @@ -4299,6 +4609,9 @@ def err_uninitialized_member_in_ctor : Error< def err_default_arg_makes_ctor_special : Error< "addition of default argument on redeclaration makes this constructor a " "%select{default|copy|move}0 constructor">; +def err_stmt_expr_in_default_arg : Error< + "default %select{argument|non-type template argument}0 may not use a GNU " + "statement expression">; def err_use_of_default_argument_to_function_declared_later : Error< "use of default argument to function %0 that is declared later in class %1">; @@ -4443,12 +4756,14 @@ def note_ovl_candidate_non_deduced_mismatch_qualified : Note< // Note that we don't treat templates differently for this diagnostic. def note_ovl_candidate_arity : Note<"candidate " "%sub{select_ovl_candidate_kind}0,1,2 not viable: " - "requires%select{ at least| at most|}3 %4 argument%s4, but %5 " + "requires%select{ at least| at most|}3 %4 " + "%select{|non-object }6argument%s4, but %5 " "%plural{1:was|:were}5 provided">; def note_ovl_candidate_arity_one : Note<"candidate " "%sub{select_ovl_candidate_kind}0,1,2 not viable: " "%select{requires at least|allows at most single|requires single}3 " + "%select{|non-object }6" "argument %4, but %plural{0:no|:%5}5 arguments were provided">; def note_ovl_candidate_deleted : Note< @@ -4472,7 +4787,8 @@ def note_ovl_candidate_bad_conv_incomplete : Note< "; remove &}7">; def note_ovl_candidate_bad_list_argument : Note< "candidate %sub{select_ovl_candidate_kind}0,1,2 not viable: " - "cannot convert initializer list argument to %4">; + "%select{cannot convert initializer list|too few initializers in list" + "|too many initializers in list}7 argument to %4">; def note_ovl_candidate_bad_overload : Note< "candidate %sub{select_ovl_candidate_kind}0,1,2 not viable: " "no overload of %4 matching %3 for %ordinal5 argument">; @@ -4523,9 +4839,6 @@ def note_ovl_candidate_bad_cvr : Note< "%select{const|restrict|const and restrict|volatile|const and volatile|" "volatile and restrict|const, volatile, and restrict}4 qualifier" "%select{||s||s|s|s}4">; -def note_ovl_candidate_bad_unaligned : Note< - "candidate %sub{select_ovl_candidate_kind}0,1,2 not viable: " - "%ordinal5 argument (%3) would lose __unaligned qualifier">; def note_ovl_candidate_bad_base_to_derived_conv : Note< "candidate %sub{select_ovl_candidate_kind}0,1,2 not viable: " "cannot %select{convert from|convert from|bind}3 " @@ -4540,6 +4853,8 @@ def note_ovl_candidate_bad_target : Note< def note_ovl_candidate_constraints_not_satisfied : Note< "candidate %sub{select_ovl_candidate_kind}0,1,2 not viable: constraints " "not satisfied">; +def note_ovl_surrogate_constraints_not_satisfied : Note< + "conversion candidate %0 not viable: constraints not satisfied">; def note_implicit_member_target_infer_collision : Note< "implicit %sub{select_special_member_kind}0 inferred target collision: call to both " "%select{__device__|__global__|__host__|__host__ __device__}1 and " @@ -4582,6 +4897,8 @@ def ext_ovl_ambiguous_oper_binary_reversed : ExtWarn< def note_ovl_ambiguous_oper_binary_reversed_self : Note< "ambiguity is between a regular call to this operator and a call with the " "argument order reversed">; +def note_ovl_ambiguous_eqeq_reversed_self_non_const : Note< + "mark 'operator==' as const or add a matching 'operator!=' to resolve the ambiguity">; def note_ovl_ambiguous_oper_binary_selected_candidate : Note< "candidate function with non-reversed arguments">; def note_ovl_ambiguous_oper_binary_reversed_candidate : Note< @@ -4614,16 +4931,22 @@ def err_bound_member_function : Error< "reference to non-static member function must be called" "%select{|; did you mean to call it with no arguments?}0">; def note_possible_target_of_call : Note<"possible target for call">; +def err_no_viable_destructor : Error< + "no viable destructor found for class %0">; +def err_ambiguous_destructor : Error< + "destructor of class %0 is ambiguous">; def err_ovl_no_viable_object_call : Error< "no matching function for call to object of type %0">; def err_ovl_ambiguous_object_call : Error< "call to object of type %0 is ambiguous">; +def err_ovl_ambiguous_subscript_call : Error< + "call to subscript operator of type %0 is ambiguous">; def err_ovl_deleted_object_call : Error< "call to deleted function call operator in type %0">; def note_ovl_surrogate_cand : Note<"conversion candidate of type %0">; def err_member_call_without_object : Error< - "call to non-static member function without an object argument">; + "call to %select{non-static|explicit}0 member function without an object argument">; // C++ Address of Overloaded Function def err_addr_ovl_no_viable : Error< @@ -4648,8 +4971,10 @@ def err_ovl_no_viable_literal_operator : Error< def err_template_param_shadow : Error< "declaration of %0 shadows template parameter">; def ext_template_param_shadow : ExtWarn< - err_template_param_shadow.Text>, InGroup<MicrosoftTemplateShadow>; + err_template_param_shadow.Summary>, InGroup<MicrosoftTemplateShadow>; def note_template_param_here : Note<"template parameter is declared here">; +def note_template_param_external : Note< + "template parameter from hidden source: %0">; def warn_template_export_unsupported : Warning< "exported templates are unsupported">; def err_template_outside_namespace_or_class_scope : Error< @@ -4719,8 +5044,12 @@ def warn_cxx14_compat_template_nontype_parm_auto_type : Warning< DefaultIgnore, InGroup<CXXPre17Compat>; def err_template_param_default_arg_redefinition : Error< "template parameter redefines default argument">; +def err_template_param_default_arg_inconsistent_redefinition : Error< + "template parameter default argument is inconsistent with previous definition">; def note_template_param_prev_default_arg : Note< "previous default template argument defined here">; +def note_template_param_prev_default_arg_in_other_module : Note< + "previous default template argument defined in module %0">; def err_template_param_default_arg_missing : Error< "template parameter missing a default argument">; def ext_template_parameter_default_in_function_template : ExtWarn< @@ -4745,6 +5074,7 @@ def warn_cxx11_compat_variable_template : Warning< def err_template_variable_noparams : Error< "extraneous 'template<>' in declaration of variable %0">; def err_template_member : Error<"member %0 declared as a template">; +def err_member_with_template_arguments : Error<"member %0 cannot have template arguments">; def err_template_member_noparams : Error< "extraneous 'template<>' in declaration of member %0">; def err_template_tag_noparams : Error< @@ -4759,6 +5089,9 @@ def ext_adl_only_template_id : ExtWarn< "use of function template name with no prior declaration in function call " "with explicit template arguments is a C++20 extension">, InGroup<CXX20>; +def warn_unqualified_call_to_std_cast_function : Warning< + "unqualified call to '%0'">, InGroup<DiagGroup<"unqualified-std-cast-call">>; + // C++ Template Argument Lists def err_template_missing_args : Error< "use of " @@ -4770,6 +5103,8 @@ def err_template_arg_list_different_arity : Error< "%select{class template|function template|variable template|alias template|" "template template parameter|concept|template}1 %2">; def note_template_decl_here : Note<"template is declared here">; +def note_template_decl_external : Note< + "template declaration from hidden source: %0">; def err_template_arg_must_be_type : Error< "template argument for template type parameter must be a type">; def err_template_arg_must_be_type_suggest : Error< @@ -4832,8 +5167,6 @@ def err_non_type_template_arg_subobject : Error< "non-type template argument refers to subobject '%0'">; def err_non_type_template_arg_addr_label_diff : Error< "template argument / label address difference / what did you expect?">; -def err_non_type_template_arg_unsupported : Error< - "sorry, non-type template argument of type %0 is not yet supported">; def err_template_arg_not_convertible : Error< "non-type template argument of type %0 cannot be converted to a value " "of type %1">; @@ -4885,9 +5218,8 @@ def err_template_arg_not_object_or_func : Error< "non-type template argument does not refer to an object or function">; def err_template_arg_not_pointer_to_member_form : Error< "non-type template argument is not a pointer to member constant">; -def err_template_arg_member_ptr_base_derived_not_supported : Error< - "sorry, non-type template argument of pointer-to-member type %1 that refers " - "to member %q0 of a different class is not supported yet">; +def err_template_arg_invalid : Error< + "non-type template argument '%0' is invalid">; def ext_template_arg_extra_parens : ExtWarn< "address non-type template argument cannot be surrounded by parentheses">; def warn_cxx98_compat_template_arg_extra_parens : Warning< @@ -4924,8 +5256,6 @@ def err_template_spec_unknown_kind : Error< "class template">; def note_specialized_entity : Note< "explicitly specialized declaration is here">; -def note_explicit_specialization_declared_here : Note< - "explicit specialization declared here">; def err_template_spec_decl_function_scope : Error< "explicit specialization of %0 in function scope">; def err_template_spec_decl_friend : Error< @@ -4970,11 +5300,11 @@ def err_explicit_specialization_inconsistent_storage_class : Error< "'%select{none|extern|static|__private_extern__|auto|register}0'">; def err_dependent_function_template_spec_no_match : Error< "no candidate function template was found for dependent" - " friend function template specialization">; + " %select{member|friend}0 function template specialization">; def note_dependent_function_template_spec_discard_reason : Note< - "candidate ignored: %select{not a function template" - "|not a member of the enclosing namespace;" - " did you mean to explicitly qualify the specialization?}0">; + "candidate ignored: %select{not a function template|" + "not a member of the enclosing %select{class template|" + "namespace; did you mean to explicitly qualify the specialization?}1}0">; // C++ class template specializations and out-of-line definitions def err_template_spec_needs_header : Error< @@ -5034,8 +5364,6 @@ def err_partial_spec_ordering_ambiguous : Error< def note_partial_spec_match : Note<"partial specialization matches %0">; def err_partial_spec_redeclared : Error< "class template partial specialization %0 cannot be redeclared">; -def note_partial_specialization_declared_here : Note< - "explicit specialization declared here">; def note_prev_partial_spec_here : Note< "previous declaration of class template partial specialization %0 is here">; def err_partial_spec_fully_specialized : Error< @@ -5068,6 +5396,8 @@ def err_function_template_partial_spec : Error< 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 note_template_recursion_depth : Note< "use -ftemplate-depth=N to increase recursive template instantiation depth">; @@ -5104,6 +5434,8 @@ def note_template_exception_spec_instantiation_here : Note< "in instantiation of exception specification for %0 requested here">; def note_template_requirement_instantiation_here : Note< "in instantiation of requirement here">; +def note_template_requirement_params_instantiation_here : Note< + "in instantiation of requirement parameters here">; def warn_var_template_missing : Warning<"instantiation of variable %q0 " "required here, but no definition is available">, InGroup<UndefinedVarTemplate>; @@ -5158,6 +5490,10 @@ def note_constraint_normalization_here : Note< def note_parameter_mapping_substitution_here : Note< "while substituting into concept arguments here; substitution failures not " "allowed in concept arguments">; +def note_building_deduction_guide_here : Note< + "while building implicit deduction guide first needed here">; +def note_lambda_substitution_here : Note< + "while substituting into a lambda expression here">; def note_instantiation_contexts_suppressed : Note< "(skipping %0 context%s0 in backtrace; use -ftemplate-backtrace-limit=0 to " "see all)">; @@ -5263,7 +5599,7 @@ def err_mismatched_exception_spec_explicit_instantiation : Error< "exception specification in explicit instantiation does not match " "instantiated one">; def ext_mismatched_exception_spec_explicit_instantiation : ExtWarn< - err_mismatched_exception_spec_explicit_instantiation.Text>, + err_mismatched_exception_spec_explicit_instantiation.Summary>, InGroup<MicrosoftExceptionSpec>; def err_explicit_instantiation_dependent : Error< "explicit instantiation has dependent template arguments">; @@ -5301,6 +5637,12 @@ def err_typename_refers_to_using_value_decl : Error< "%0 in %1">; def note_using_value_decl_missing_typename : Note< "add 'typename' to treat this using declaration as a type">; +def warn_cxx17_compat_implicit_typename : Warning<"use of implicit 'typename' is " + "incompatible with C++ standards before C++20">, InGroup<CXX20Compat>, + DefaultIgnore; +def ext_implicit_typename : ExtWarn<"missing 'typename' prior to dependent " + "type name %0%1; implicit 'typename' is a C++20 extension">, + InGroup<CXX20>; def err_template_kw_refers_to_non_template : Error< "%0%select{| following the 'template' keyword}1 " @@ -5310,10 +5652,10 @@ def note_template_kw_refers_to_non_template : Note< def err_template_kw_refers_to_dependent_non_template : Error< "%0%select{| following the 'template' keyword}1 " "cannot refer to a dependent template">; -def err_template_kw_refers_to_class_template : Error< - "'%0%1' instantiated to a class template, not a function template">; -def note_referenced_class_template : Note< - "class template declared here">; +def err_template_kw_refers_to_type_template : Error< + "'%0%1' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template">; +def note_referenced_type_template : Note< + "%select{class|type alias}0 template declared here">; def err_template_kw_missing : Error< "missing 'template' keyword prior to dependent template name '%0%1'">; def ext_template_outside_of_template : ExtWarn< @@ -5359,9 +5701,9 @@ def err_unexpanded_parameter_pack : Error< "%select{expression|base type|declaration type|data member type|bit-field " "size|static assertion|fixed underlying type|enumerator value|" "using declaration|friend declaration|qualifier|initializer|default argument|" - "non-type template parameter type|exception type|partial specialization|" - "__if_exists name|__if_not_exists name|lambda|block|type constraint|" - "requirement|requires clause}0 " + "non-type template parameter type|exception type|explicit specialization|" + "partial specialization|__if_exists name|__if_not_exists name|lambda|block|" + "type constraint|requirement|requires clause}0 " "contains%plural{0: an|:}1 unexpanded parameter pack" "%plural{0:|1: %2|2:s %2 and %3|:s %2, %3, ...}1">; @@ -5417,6 +5759,9 @@ def err_found_later_in_class : Error<"member %0 used before its declaration">; def ext_found_later_in_class : ExtWarn< "use of member %0 before its declaration is a Microsoft extension">, InGroup<MicrosoftTemplate>; +def ext_unqualified_base_class : ExtWarn< + "unqualified base initializer of class templates is a Microsoft extension">, + InGroup<MicrosoftTemplate>; def note_dependent_member_use : Note< "must qualify identifier to find this declaration in dependent base class">; def err_not_found_by_two_phase_lookup : Error<"call to function %0 that is neither " @@ -5444,6 +5789,9 @@ def warn_deprecated_def : Warning< def warn_unavailable_def : Warning< "implementing unavailable method">, InGroup<DeprecatedImplementations>, DefaultIgnore; +def warn_deprecated_builtin : Warning< + "builtin %0 is deprecated; use %1 instead">, + InGroup<DeprecatedBuiltins>; def err_unavailable : Error<"%0 is unavailable">; def err_property_method_unavailable : Error<"property access is using %0 method which is unavailable">; @@ -5467,16 +5815,28 @@ def warn_missing_sentinel : Warning < InGroup<Sentinel>; def note_sentinel_here : Note< "%select{function|method|block}0 has been explicitly marked sentinel here">; +def warn_strict_uses_without_prototype : Warning< + "passing arguments to %select{a function|%1}0 without a prototype is " + "deprecated in all versions of C and is not supported in C23">, + InGroup<DeprecatedNonPrototype>; def warn_missing_prototype : Warning< "no previous prototype for function %0">, InGroup<DiagGroup<"missing-prototypes">>, DefaultIgnore; def note_declaration_not_a_prototype : Note< "this declaration is not a prototype; add %select{'void'|parameter declarations}0 " "to make it %select{a prototype for a zero-parameter function|one}0">; -def warn_strict_prototypes : Warning< - "this %select{function declaration is not|block declaration is not|" - "old-style function definition is not preceded by}0 a prototype">, - InGroup<DiagGroup<"strict-prototypes">>, DefaultIgnore; +// This is not actually an extension, but we only want it to be enabled in +// -pedantic mode and this is the most direct way of accomplishing that. +def warn_strict_prototypes : Extension< + "a %select{function|block}0 declaration without a prototype is deprecated " + "%select{in all versions of C|}0">, InGroup<StrictPrototypes>; +def warn_non_prototype_changes_behavior : Warning< + "a function %select{declaration|definition}0 without a prototype is " + "deprecated in all versions of C %select{and is not supported in C23|and is " + "treated as a zero-parameter prototype in C23, conflicting with a " + "%select{previous|subsequent}2 %select{declaration|definition}3}1">, + InGroup<DeprecatedNonPrototype>; +def note_conflicting_prototype : Note<"conflicting prototype is here">; def warn_missing_variable_declarations : Warning< "no previous extern declaration for non-static variable %0">, InGroup<DiagGroup<"missing-variable-declarations">>, DefaultIgnore; @@ -5511,6 +5871,12 @@ def err_new_abi_tag_on_redeclaration : Error< def note_use_ifdef_guards : Note< "unguarded header; consider using #ifdef guards or #pragma once">; +def warn_var_decl_not_read_only : Warning< + "object of type %0 cannot be placed in read-only memory">, + InGroup<ReadOnlyPlacementChecks>; +def note_enforce_read_only_placement : Note<"type was declared read-only here">; + + def note_deleted_dtor_no_operator_delete : Note< "virtual destructor requires an unambiguous, accessible 'operator delete'">; def note_deleted_special_member_class_subobject : Note< @@ -5563,8 +5929,8 @@ def warn_undefined_inline : Warning<"inline function %q0 is not defined">, def err_undefined_inline_var : Error<"inline variable %q0 is not defined">; def note_used_here : Note<"used here">; -def err_internal_linkage_redeclaration : Error< - "'internal_linkage' attribute does not appear on the first declaration of %0">; +def err_attribute_missing_on_first_decl : Error< + "%0 attribute does not appear on the first declaration">; def warn_internal_linkage_local_storage : Warning< "'internal_linkage' attribute on a non-static local variable is ignored">, InGroup<IgnoredAttributes>; @@ -5640,6 +6006,8 @@ def warn_forward_class_redefinition : Warning< def err_redefinition_different_typedef : Error< "%select{typedef|type alias|type alias template}0 " "redefinition with different types%diff{ ($ vs $)|}1,2">; +def err_redefinition_different_concept : Error< + "redefinition of concept %0 with different template parameters or requirements">; def err_tag_reference_non_tag : Error< "%select{non-struct type|non-class type|non-union type|non-enum " "type|typedef|type alias|template|type alias template|template " @@ -5727,7 +6095,7 @@ def warn_typecheck_function_qualifiers_unspecified : Warning< "'%0' qualifier on function type %1 has unspecified behavior">; def warn_typecheck_reference_qualifiers : Warning< "'%0' qualifier on reference type %1 has no effect">, - InGroup<IgnoredQualifiers>; + InGroup<IgnoredReferenceQualifiers>; def err_typecheck_invalid_restrict_not_pointer : Error< "restrict requires a pointer or reference (%0 is invalid)">; def err_typecheck_invalid_restrict_not_pointer_noarg : Error< @@ -5737,7 +6105,7 @@ def err_typecheck_invalid_restrict_invalid_pointee : Error< def ext_typecheck_zero_array_size : Extension< "zero size arrays are an extension">, InGroup<ZeroLengthArray>; def err_typecheck_zero_array_size : Error< - "zero-length arrays are not permitted in C++">; + "zero-length arrays are not permitted in %select{C++|SYCL device code}0">; def err_array_size_non_int : Error<"size of array has non-integer type %0">; def err_init_element_not_constant : Error< "initializer element is not a compile-time constant">; @@ -5757,7 +6125,7 @@ def err_loader_uninitialized_extern_decl : Error<"variable %0 cannot be declared both 'extern' and with the " "'loader_uninitialized' attribute">; def err_block_extern_cant_init : Error< - "'extern' variable cannot have an initializer">; + "declaration of block scope identifier with linkage cannot have an initializer">; def warn_extern_init : Warning<"'extern' variable has an initializer">, InGroup<DiagGroup<"extern-initializer">>; def err_variable_object_no_init : Error< @@ -5778,7 +6146,7 @@ def ext_excess_initializers_in_char_array_initializer : ExtWarn< "excess elements in char array initializer">, InGroup<ExcessInitializers>; def err_initializer_string_for_char_array_too_long : Error< - "initializer-string for char array is too long">; + "initializer-string for char array is too long, array size is %0 but initializer has size %1 (including the null terminating character)">; def ext_initializer_string_for_char_array_too_long : ExtWarn< "initializer-string for char array is too long">, InGroup<ExcessInitializers>; @@ -5818,12 +6186,20 @@ def err_illegal_initializer_type : Error<"illegal initializer type %0">; def ext_init_list_type_narrowing : ExtWarn< "type %0 cannot be narrowed to %1 in initializer list">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure; +def ext_init_list_type_narrowing_const_reference : ExtWarn< + ext_init_list_type_narrowing.Summary>, + InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure; def ext_init_list_variable_narrowing : ExtWarn< "non-constant-expression cannot be narrowed from type %0 to %1 in " "initializer list">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure; +def ext_init_list_variable_narrowing_const_reference : ExtWarn< + ext_init_list_variable_narrowing.Summary>, InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure; def ext_init_list_constant_narrowing : ExtWarn< "constant expression evaluates to %0 which cannot be narrowed to type %1">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure; +def ext_init_list_constant_narrowing_const_reference : ExtWarn< + ext_init_list_constant_narrowing.Summary>, + InGroup<CXX11NarrowingConstReference>, DefaultError, SFINAEFailure; def warn_init_list_type_narrowing : Warning< "type %0 cannot be narrowed to %1 in initializer list in C++11">, InGroup<CXX11Narrowing>, DefaultIgnore; @@ -5926,6 +6302,8 @@ def note_protected_by_vla_type_alias : Note< "jump bypasses initialization of VLA type alias">; def note_protected_by_constexpr_if : Note< "jump enters controlled statement of constexpr if">; +def note_protected_by_consteval_if : Note< + "jump enters controlled statement of consteval if">; def note_protected_by_if_available : Note< "jump enters controlled statement of if available">; def note_protected_by_vla : Note< @@ -5971,6 +6349,8 @@ def note_enters_block_captures_non_trivial_c_struct : Note< "to destroy">; def note_enters_compound_literal_scope : Note< "jump enters lifetime of a compound literal that is non-trivial to destruct">; +def note_enters_statement_expression : Note< + "jump enters a statement expression">; def note_exits_cleanup : Note< "jump exits scope of variable with __attribute__((cleanup))">; @@ -6085,6 +6465,19 @@ def warn_superclass_variable_sized_type_not_at_end : Warning< "field %0 can overwrite instance variable %1 with variable sized type %2" " in superclass %3">, InGroup<ObjCFlexibleArray>; +def err_flexible_array_count_not_in_same_struct : Error< + "'counted_by' field %0 isn't within the same struct as the flexible array">; +def err_counted_by_attr_not_on_flexible_array_member : Error< + "'counted_by' only applies to C99 flexible array members">; +def err_counted_by_attr_refers_to_flexible_array : Error< + "'counted_by' cannot refer to the flexible array %0">; +def err_counted_by_must_be_in_structure : Error< + "field %0 in 'counted_by' not inside structure">; +def err_flexible_array_counted_by_attr_field_not_integer : Error< + "field %0 in 'counted_by' must be a non-boolean integer type">; +def note_flexible_array_counted_by_attr_field : Note< + "field %0 declared here">; + let CategoryName = "ARC Semantic Issue" in { // ARC-mode diagnostics. @@ -6351,10 +6744,23 @@ def err_func_def_incomplete_result : Error< def err_atomic_specifier_bad_type : Error<"_Atomic cannot be applied to " "%select{incomplete |array |function |reference |atomic |qualified " - "|sizeless ||integer }0type " - "%1 %select{|||||||which is not trivially copyable|}0">; + "|sizeless ||integer |}0type " + "%1 %select{|||||||which is not trivially copyable||in C23}0">; +def warn_atomic_member_access : Warning< + "accessing a member of an atomic structure or union is undefined behavior">, + InGroup<DiagGroup<"atomic-access">>, DefaultError; // Expressions. +def err_using_placeholder_variable : Error< + "ambiguous reference to placeholder '_', which is defined multiple times">; +def note_reference_placeholder : Note< + "placeholder declared here">; +def ext_placeholder_var_definition : ExtWarn< + "placeholder variables are a C++2c extension">, InGroup<CXX26>; +def warn_cxx23_placeholder_var_definition : Warning< + "placeholder variables are incompatible with C++ standards before C++2c">, + DefaultIgnore, InGroup<CXXPre26Compat>; + def ext_sizeof_alignof_function_type : Extension< "invalid application of '%0' to a function type">, InGroup<PointerArith>; def ext_sizeof_alignof_void_type : Extension< @@ -6368,7 +6774,8 @@ def err_sizeof_alignof_function_type : Error< def err_openmp_default_simd_align_expr : Error< "invalid application of '__builtin_omp_required_simd_align' to an expression, only type is allowed">; def err_sizeof_alignof_typeof_bitfield : Error< - "invalid application of '%select{sizeof|alignof|typeof}0' to bit-field">; + "invalid application of '%select{sizeof|alignof|typeof|typeof_unqual}0' to " + "bit-field">; def err_alignof_member_of_incomplete_type : Error< "invalid application of 'alignof' to a field of a class still being defined">; def err_vecstep_non_scalar_vector_type : Error< @@ -6391,22 +6798,21 @@ def warn_sub_ptr_zero_size_types : Warning< def warn_pointer_arith_null_ptr : Warning< "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0">, InGroup<NullPointerArithmetic>, DefaultIgnore; -def warn_gnu_null_ptr_arith : Warning< +def warn_gnu_null_ptr_arith : Extension< "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension">, - InGroup<NullPointerArithmetic>, DefaultIgnore; + InGroup<GNUNullPointerArithmetic>; def warn_pointer_sub_null_ptr : Warning< "performing pointer subtraction with a null pointer %select{has|may have}0 undefined behavior">, InGroup<NullPointerSubtraction>, DefaultIgnore; -def err_kernel_invalidates_sycl_unique_stable_name - : Error<"kernel instantiation changes the result of an evaluated " - "'__builtin_sycl_unique_stable_name'">; -def note_sycl_unique_stable_name_evaluated_here - : Note<"'__builtin_sycl_unique_stable_name' evaluated here">; def warn_floatingpoint_eq : Warning< "comparing floating point with == or != is unsafe">, InGroup<DiagGroup<"float-equal">>, DefaultIgnore; +def err_setting_eval_method_used_in_unsafe_context : Error < + "%select{'#pragma clang fp eval_method'|option 'ffp-eval-method'}0 cannot be used with " + "%select{option 'fapprox-func'|option 'mreassociate'|option 'freciprocal'|option 'ffp-eval-method'|'#pragma clang fp reassociate'|'#pragma clang fp reciprocal'}1">; + def warn_remainder_division_by_zero : Warning< "%select{remainder|division}0 by zero is undefined">, InGroup<DivZero>; @@ -6476,15 +6882,27 @@ def warn_addition_in_bitshift : Warning< "'%1' will be evaluated first">, InGroup<ShiftOpParentheses>; def warn_self_assignment_builtin : Warning< - "explicitly assigning value of variable of type %0 to itself">, + "explicitly assigning value of variable of type %0 to itself%select{|; did " + "you mean to assign to member %2?}1">, InGroup<SelfAssignment>, DefaultIgnore; def warn_self_assignment_overloaded : Warning< - "explicitly assigning value of variable of type %0 to itself">, + "explicitly assigning value of variable of type %0 to itself%select{|; did " + "you mean to assign to member %2?}1">, InGroup<SelfAssignmentOverloaded>, DefaultIgnore; def warn_self_move : Warning< - "explicitly moving variable of type %0 to itself">, + "explicitly moving variable of type %0 to itself%select{|; did you mean to " + "move to member %2?}1">, InGroup<SelfMove>, DefaultIgnore; +def err_builtin_move_forward_unsupported : Error< + "unsupported signature for %q0">; +def err_use_of_unaddressable_function : Error< + "taking address of non-addressable standard library function">; +// FIXME: This should also be in -Wc++23-compat once we have it. +def warn_cxx20_compat_use_of_unaddressable_function : Warning< + "taking address of non-addressable standard library function " + "is incompatible with C++20">, InGroup<CXX20Compat>; + def warn_redundant_move_on_return : Warning< "redundant move in return statement">, InGroup<RedundantMove>, DefaultIgnore; @@ -6527,7 +6945,8 @@ def err_arithmetic_nonfragile_interface : Error< "this architecture and platform">; def warn_deprecated_comma_subscript : Warning< - "top-level comma expression in array subscript is deprecated">, + "top-level comma expression in array subscript is deprecated " + "in C++20 and unsupported in C++23">, InGroup<DeprecatedCommaSubscript>; def ext_subscript_non_lvalue : Extension< @@ -6540,10 +6959,13 @@ def err_subscript_function_type : Error< "subscript of pointer to function type %0">; def err_subscript_incomplete_or_sizeless_type : Error< "subscript of pointer to %select{incomplete|sizeless}0 type %1">; +def err_subscript_svbool_t : Error< + "subscript of svbool_t is not allowed">; def err_dereference_incomplete_type : Error< "dereference of pointer to incomplete type %0">; def ext_gnu_subscript_void_type : Extension< - "subscript of a pointer to void is a GNU extension">, InGroup<PointerArith>; + "subscript of a pointer to void is a GNU extension">, + InGroup<GNUPointerArith>; def err_typecheck_member_reference_struct_union : Error< "member reference base type %0 is not a structure or union">; def err_typecheck_member_reference_ivar : Error< @@ -6602,6 +7024,11 @@ def err_member_decl_does_not_match : Error< "does not match any declaration in %1">; def err_friend_decl_with_def_arg_must_be_def : Error< "friend declaration specifying a default argument must be a definition">; +def err_friend_decl_with_enclosing_temp_constraint_must_be_def : Error< + "friend declaration with a constraint that depends on an enclosing " + "template parameter must be a definition">; +def err_non_temp_friend_decl_with_requires_clause_must_be_def : Error< + "non-template friend declaration with a requires clause must be a definition">; def err_friend_decl_with_def_arg_redeclared : Error< "friend declaration specifying a default argument must be the only declaration">; def err_friend_decl_does_not_match : Error< @@ -6624,7 +7051,7 @@ def ext_out_of_line_declaration : ExtWarn< def err_member_extra_qualification : Error< "extra qualification on member %0">; def warn_member_extra_qualification : Warning< - err_member_extra_qualification.Text>, InGroup<MicrosoftExtraQualification>; + err_member_extra_qualification.Summary>, InGroup<MicrosoftExtraQualification>; def warn_namespace_member_extra_qualification : Warning< "extra qualification on member %0">, InGroup<DiagGroup<"extra-qualification">>; @@ -6682,8 +7109,8 @@ def err_array_init_plain_string_into_char8_t : Error< def note_array_init_plain_string_into_char8_t : Note< "add 'u8' prefix to form a 'char8_t' string literal">; def err_array_init_utf8_string_into_char : Error< - "%select{|ISO C++20 does not permit }0initialization of char array with " - "UTF-8 string literal%select{ is not permitted by '-fchar8_t'|}0">; + "initialization of %select{|signed }0char array with " + "UTF-8 string literal is not permitted by %select{'-fchar8_t'|C++20}1">; def warn_cxx20_compat_utf8_string : Warning< "type of UTF-8 string literal will change from array of const char to " "array of const char8_t in C++20">, InGroup<CXX20Compat>, DefaultIgnore; @@ -6718,7 +7145,7 @@ def warn_standalone_specifier : Warning<"'%0' ignored on this declaration">, def ext_standalone_specifier : ExtWarn<"'%0' is not permitted on a declaration " "of a type">, InGroup<MissingDeclarations>; def err_standalone_class_nested_name_specifier : Error< - "forward declaration of %select{class|struct|interface|union|enum}0 cannot " + "forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot " "have a nested name specifier">; def err_typecheck_sclass_func : Error<"illegal storage class on function">; def err_static_block_func : Error< @@ -6752,8 +7179,10 @@ def err_typecheck_unary_expr : Error< def err_typecheck_indirection_requires_pointer : Error< "indirection requires pointer operand (%0 invalid)">; def ext_typecheck_indirection_through_void_pointer : ExtWarn< - "ISO C++ does not allow indirection on operand of type %0">, - InGroup<DiagGroup<"void-ptr-dereference">>; + "ISO C does not allow indirection on operand of type %0">, + InGroup<VoidPointerDeref>; +def err_typecheck_indirection_through_void_pointer_cpp + : Error<"indirection not permitted on operand of type %0">; def warn_indirection_through_null : Warning< "indirection of non-volatile null pointer will be deleted, not trap">, InGroup<NullDereference>; @@ -6770,7 +7199,7 @@ def warn_taking_address_of_packed_member : Warning< "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value">, InGroup<DiagGroup<"address-of-packed-member">>; def warn_param_mismatched_alignment : Warning< - "passing %0-byte aligned argument to %1-byte aligned parameter %2 of %3 may result in an unaligned pointer access">, + "passing %0-byte aligned argument to %1-byte aligned parameter %2%select{| of %4}3 may result in an unaligned pointer access">, InGroup<DiagGroup<"align-mismatch">>; def err_objc_object_assignment : Error< @@ -6848,6 +7277,11 @@ def warn_arith_conv_enum_float_cxx20 : Warning< "%plural{2:with|4:from|:and}0 " "%select{enumeration|floating-point}1 type %3 is deprecated">, InGroup<DeprecatedEnumFloatConversion>; +def err_arith_conv_enum_float_cxx26 : Error< + "invalid %sub{select_arith_conv_kind}0 " + "%select{floating-point|enumeration}1 type %2 " + "%plural{2:with|4:from|:and}0 " + "%select{enumeration|floating-point}1 type %3">; def warn_arith_conv_mixed_enum_types : Warning< "%sub{select_arith_conv_kind}0 " "different enumeration types%diff{ ($ and $)|}1,2">, @@ -6856,23 +7290,27 @@ def warn_arith_conv_mixed_enum_types_cxx20 : Warning< "%sub{select_arith_conv_kind}0 " "different enumeration types%diff{ ($ and $)|}1,2 is deprecated">, InGroup<DeprecatedEnumEnumConversion>; +def err_conv_mixed_enum_types_cxx26 : Error< + "invalid %sub{select_arith_conv_kind}0 " + "different enumeration types%diff{ ($ and $)|}1,2">; + def warn_arith_conv_mixed_anon_enum_types : Warning< - warn_arith_conv_mixed_enum_types.Text>, + warn_arith_conv_mixed_enum_types.Summary>, InGroup<AnonEnumEnumConversion>, DefaultIgnore; def warn_arith_conv_mixed_anon_enum_types_cxx20 : Warning< - warn_arith_conv_mixed_enum_types_cxx20.Text>, + warn_arith_conv_mixed_enum_types_cxx20.Summary>, InGroup<DeprecatedAnonEnumEnumConversion>; def warn_conditional_mixed_enum_types : Warning< - warn_arith_conv_mixed_enum_types.Text>, + warn_arith_conv_mixed_enum_types.Summary>, InGroup<EnumCompareConditional>, DefaultIgnore; def warn_conditional_mixed_enum_types_cxx20 : Warning< - warn_arith_conv_mixed_enum_types_cxx20.Text>, + warn_arith_conv_mixed_enum_types_cxx20.Summary>, InGroup<DeprecatedEnumCompareConditional>; def warn_comparison_mixed_enum_types : Warning< - warn_arith_conv_mixed_enum_types.Text>, + warn_arith_conv_mixed_enum_types.Summary>, InGroup<EnumCompare>; def warn_comparison_mixed_enum_types_cxx20 : Warning< - warn_arith_conv_mixed_enum_types_cxx20.Text>, + warn_arith_conv_mixed_enum_types_cxx20.Summary>, InGroup<DeprecatedEnumCompare>; def warn_comparison_of_mixed_enum_types_switch : Warning< "comparison of different enumeration types in switch statement" @@ -6932,7 +7370,7 @@ def warn_out_of_range_compare : Warning< "result of comparison of %select{constant %0|true|false}1 with " "%select{expression of type %2|boolean expression}3 is always %4">, InGroup<TautologicalOutOfRangeCompare>; -def warn_tautological_bool_compare : Warning<warn_out_of_range_compare.Text>, +def warn_tautological_bool_compare : Warning<warn_out_of_range_compare.Summary>, InGroup<TautologicalConstantCompare>; def warn_integer_constants_in_conditional_always_true : Warning< "converting the result of '?:' with integer constants to a boolean always " @@ -6964,14 +7402,16 @@ def note_logical_not_silence_with_parens : Note< "add parentheses around left hand side expression to silence this warning">; def err_invalid_this_use : Error< - "invalid use of 'this' outside of a non-static member function">; + "invalid use of 'this' %select{outside of a non-static member function" + "|in a function with an explicit object parameter}0">; def err_this_static_member_func : Error< "'this' cannot be%select{| implicitly}0 used in a static member function " "declaration">; -def err_invalid_member_use_in_static_method : Error< - "invalid use of member %0 in static member function">; +def err_invalid_member_use_in_method : Error< + "invalid use of member %0 in %select{static|explicit object}1 member function">; + def err_invalid_qualified_function_type : Error< - "%select{non-member function|static member function|deduction guide}0 " + "%select{non-member function|static member function|explicit object member function|deduction guide}0 " "%select{of type %2 |}1cannot have '%3' qualifier">; def err_compound_qualified_function_type : Error< "%select{block pointer|pointer|reference}0 to function type %select{%2 |}1" @@ -6979,6 +7419,26 @@ def err_compound_qualified_function_type : Error< def err_qualified_function_typeid : Error< "type operand %0 of 'typeid' cannot have '%1' qualifier">; +def err_cxx20_deducing_this : Error< + "explicit object parameters are incompatible with C++ standards before C++2b">; +def err_explicit_object_default_arg: Error< + "the explicit object parameter cannot have a default argument">; +def err_explicit_object_parameter_pack: Error< + "the explicit object parameter cannot be a function parameter pack">; +def err_explicit_object_parameter_must_be_first: Error< + "an explicit object parameter can only appear as the first parameter " + "of the %select{function|lambda}0">; +def err_explicit_object_parameter_nonmember: Error< + "an explicit object parameter cannot appear in a " + "%select{static|virtual|non-member}0 %select{function|lambda}1">; +def err_explicit_object_parameter_constructor: Error< + "an explicit object parameter cannot appear in a %select{constructor|destructor}0">; +def err_explicit_object_parameter_mutable: Error< + "a lambda with an explicit object parameter cannot be mutable">; +def err_invalid_explicit_object_type_in_lambda: Error< + "invalid explicit object parameter type %0 in lambda with capture; " + "the type must be the same as, or derived from, the lambda">; + def err_ref_qualifier_overload : Error< "cannot overload a member function %select{without a ref-qualifier|with " "ref-qualifier '&'|with ref-qualifier '&&'}0 with a member function %select{" @@ -7064,11 +7524,11 @@ def err_duplicate_property : Error< "property has a previous declaration">; def ext_gnu_void_ptr : Extension< "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension">, - InGroup<PointerArith>; + InGroup<GNUPointerArith>; def ext_gnu_ptr_func_arith : Extension< "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function " "type%select{|s}2 %1%select{| and %3}2 is a GNU extension">, - InGroup<PointerArith>; + InGroup<GNUPointerArith>; def err_readonly_message_assignment : Error< "assigning to 'readonly' return result of an Objective-C message not allowed">; def ext_integer_increment_complex : Extension< @@ -7174,6 +7634,8 @@ def err_attribute_arm_builtin_alias : Error< "'__clang_arm_builtin_alias' attribute can only be applied to an ARM builtin">; def err_attribute_arm_mve_polymorphism : Error< "'__clang_arm_mve_strict_polymorphism' attribute can only be applied to an MVE/NEON vector type">; +def err_attribute_webassembly_funcref : Error< + "'__funcref' attribute can only be applied to a function pointer type">; def warn_setter_getter_impl_required : Warning< "property %0 requires method %1 to be defined - " @@ -7314,8 +7776,6 @@ def err_bad_dynamic_cast_not_polymorphic : Error<"%0 is not polymorphic">; // Other C++ expressions def err_need_header_before_typeid : Error< "you need to include <typeinfo> before using the 'typeid' operator">; -def err_need_header_before_ms_uuidof : Error< - "you need to include <guiddef.h> before using the '__uuidof' operator">; def err_need_header_before_placement_new : Error< "no matching %0 function for non-allocating placement new expression; " "include <new>">; @@ -7413,17 +7873,20 @@ def note_member_declared_here : Note< "member %0 declared here">; def note_member_first_declared_here : Note< "member %0 first declared here">; +def warn_bitwise_instead_of_logical : Warning< + "use of bitwise '%0' with boolean operands">, + InGroup<BitwiseInsteadOfLogical>, DefaultIgnore; def warn_bitwise_negation_bool : Warning< "bitwise negation of a boolean expression%select{;| always evaluates to 'true';}0 " "did you mean logical negation?">, - InGroup<DiagGroup<"bool-operation">>; + InGroup<BoolOperation>, DefaultIgnore; def err_decrement_bool : Error<"cannot decrement expression of type bool">; def warn_increment_bool : Warning< "incrementing expression of type bool is deprecated and " "incompatible with C++17">, InGroup<DeprecatedIncrementBool>; def ext_increment_bool : ExtWarn< "ISO C++17 does not allow incrementing expression of type bool">, - DefaultError, InGroup<IncrementBool>; + DefaultError, SFINAEFailure, InGroup<IncrementBool>; def err_increment_decrement_enum : Error< "cannot %select{decrement|increment}0 expression of enum type %1">; @@ -7433,9 +7896,6 @@ def warn_deprecated_increment_decrement_volatile : Warning< def warn_deprecated_simple_assign_volatile : Warning< "use of result of assignment to object of volatile-qualified type %0 " "is deprecated">, InGroup<DeprecatedVolatile>; -def warn_deprecated_compound_assign_volatile : Warning< - "compound assignment to object of volatile-qualified type %0 is deprecated">, - InGroup<DeprecatedVolatile>; def warn_deprecated_volatile_return : Warning< "volatile-qualified return type %0 is deprecated">, InGroup<DeprecatedVolatile>; @@ -7452,6 +7912,12 @@ def warn_deprecated_altivec_src_compat : Warning< "'-altivec-compat=xl' option">, InGroup<DiagGroup<"deprecated-altivec-src-compat">>; +def warn_deprecated_lax_vec_conv_all : Warning< + "Implicit conversion between vector types ('%0' and '%1') is deprecated. " + "In the future, the behavior implied by '-fno-lax-vector-conversions' " + "will be the default.">, + InGroup<DiagGroup<"deprecate-lax-vec-conv-all">>; + def err_catch_incomplete_ptr : Error< "cannot catch pointer to incomplete type %0">; def err_catch_incomplete_ref : Error< @@ -7490,7 +7956,8 @@ def note_throw_in_function : Note<"function declared non-throwing here">; def err_seh_try_outside_functions : Error< "cannot use SEH '__try' in blocks, captured regions, or Obj-C method decls">; def err_mixing_cxx_try_seh_try : Error< - "cannot use C++ 'try' in the same function as SEH '__try'">; + "cannot use %select{C++ 'try'|Objective-C '@try'}0 " + "in the same function as SEH '__try'">; def err_seh_try_unsupported : Error< "SEH '__try' is not supported on this target">; def note_conflicting_try_here : Note< @@ -7528,6 +7995,8 @@ def warn_overaligned_type : Warning< "type %0 requires %1 bytes of alignment and the default allocator only " "guarantees %2 bytes">, InGroup<OveralignedType>, DefaultIgnore; +def err_array_element_alignment : Error< + "size of array element of type %0 (%1 bytes) isn't a multiple of its alignment (%2 bytes)">; def err_aligned_allocation_unavailable : Error< "aligned %select{allocation|deallocation}0 function of type '%1' is " "%select{only|not}4 available on %2%select{ %3 or newer|}4">; @@ -7578,6 +8047,8 @@ def err_return_in_constructor_handler : Error< def warn_cdtor_function_try_handler_mem_expr : Warning< "cannot refer to a non-static member from the handler of a " "%select{constructor|destructor}0 function try block">, InGroup<Exceptions>; +def err_throw_object_throwing_dtor : Error< + "cannot throw object of type %0 with a potentially-throwing destructor">; let CategoryName = "Lambda Issue" in { def err_capture_more_than_once : Error< @@ -7688,7 +8159,7 @@ let CategoryName = "Lambda Issue" in { "is a C++20 extension">, InGroup<CXX20>; def warn_deprecated_this_capture : Warning< "implicit capture of 'this' with a capture default of '=' is deprecated">, - InGroup<DeprecatedThisCapture>, DefaultIgnore; + InGroup<DeprecatedThisCapture>; def note_deprecated_this_capture : Note< "add an explicit capture of 'this' to capture '*this' by reference">; @@ -7755,6 +8226,11 @@ def err_expected_class_or_namespace : Error<"%0 is not a class" "%select{ or namespace|, namespace, or enumeration}1">; def err_invalid_declarator_scope : Error<"cannot define or redeclare %0 here " "because namespace %1 does not enclose namespace %2">; +def err_export_non_namespace_scope_name : Error< + "cannot export %0 as it is not at namespace scope">; +def err_redeclaration_non_exported : Error < + "cannot export redeclaration %0 here since the previous declaration " + "%select{is not exported|has internal linkage|has module linkage}1">; def err_invalid_declarator_global_scope : Error< "definition or redeclaration of %0 cannot name the global scope">; def err_invalid_declarator_in_function : Error< @@ -7870,24 +8346,6 @@ def err_incompatible_qualified_id : Error< "sending type to parameter of incompatible type}0,1" "|%diff{casting $ to incompatible type $|" "casting type to incompatible type}0,1}2">; -def ext_typecheck_convert_pointer_int : ExtWarn< - "incompatible pointer to integer conversion " - "%select{%diff{assigning to $ from $|assigning to different types}0,1" - "|%diff{passing $ to parameter of type $|" - "passing to parameter of different type}0,1" - "|%diff{returning $ from a function with result type $|" - "returning from function with different return type}0,1" - "|%diff{converting $ to type $|converting between types}0,1" - "|%diff{initializing $ with an expression of type $|" - "initializing with expression of different type}0,1" - "|%diff{sending $ to parameter of type $|" - "sending to parameter of different type}0,1" - "|%diff{casting $ to type $|casting between types}0,1}2" - "%select{|; dereference with *|" - "; take the address with &|" - "; remove *|" - "; remove &}3">, - InGroup<IntConversion>; def err_typecheck_convert_pointer_int : Error< "incompatible pointer to integer conversion " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -7905,24 +8363,9 @@ def err_typecheck_convert_pointer_int : Error< "; take the address with &|" "; remove *|" "; remove &}3">; -def ext_typecheck_convert_int_pointer : ExtWarn< - "incompatible integer to pointer conversion " - "%select{%diff{assigning to $ from $|assigning to different types}0,1" - "|%diff{passing $ to parameter of type $|" - "passing to parameter of different type}0,1" - "|%diff{returning $ from a function with result type $|" - "returning from function with different return type}0,1" - "|%diff{converting $ to type $|converting between types}0,1" - "|%diff{initializing $ with an expression of type $|" - "initializing with expression of different type}0,1" - "|%diff{sending $ to parameter of type $|" - "sending to parameter of different type}0,1" - "|%diff{casting $ to type $|casting between types}0,1}2" - "%select{|; dereference with *|" - "; take the address with &|" - "; remove *|" - "; remove &}3">, - InGroup<IntConversion>, SFINAEFailure; +def ext_typecheck_convert_pointer_int : ExtWarn< + err_typecheck_convert_pointer_int.Summary>, + InGroup<IntConversion>, DefaultError; def err_typecheck_convert_int_pointer : Error< "incompatible integer to pointer conversion " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -7940,6 +8383,9 @@ def err_typecheck_convert_int_pointer : Error< "; take the address with &|" "; remove *|" "; remove &}3">; +def ext_typecheck_convert_int_pointer : ExtWarn< + err_typecheck_convert_int_pointer.Summary>, + InGroup<IntConversion>, DefaultError; def ext_typecheck_convert_pointer_void_func : Extension< "%select{%diff{assigning to $ from $|assigning to different types}0,1" "|%diff{passing $ to parameter of type $|" @@ -7982,7 +8428,7 @@ def ext_typecheck_convert_incompatible_pointer_sign : ExtWarn< "where one is of the unique plain 'char' type and the other is not}3">, InGroup<DiagGroup<"pointer-sign">>; def err_typecheck_convert_incompatible_pointer_sign : - Error<ext_typecheck_convert_incompatible_pointer_sign.Text>; + Error<ext_typecheck_convert_incompatible_pointer_sign.Summary>; def ext_typecheck_convert_incompatible_pointer : ExtWarn< "incompatible pointer types " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -8018,24 +8464,6 @@ def err_typecheck_convert_incompatible_pointer : Error< "; take the address with &|" "; remove *|" "; remove &}3">; -def ext_typecheck_convert_incompatible_function_pointer : ExtWarn< - "incompatible function pointer types " - "%select{%diff{assigning to $ from $|assigning to different types}0,1" - "|%diff{passing $ to parameter of type $|" - "passing to parameter of different type}0,1" - "|%diff{returning $ from a function with result type $|" - "returning from function with different return type}0,1" - "|%diff{converting $ to type $|converting between types}0,1" - "|%diff{initializing $ with an expression of type $|" - "initializing with expression of different type}0,1" - "|%diff{sending $ to parameter of type $|" - "sending to parameter of different type}0,1" - "|%diff{casting $ to type $|casting between types}0,1}2" - "%select{|; dereference with *|" - "; take the address with &|" - "; remove *|" - "; remove &}3">, - InGroup<IncompatibleFunctionPointerTypes>; def err_typecheck_convert_incompatible_function_pointer : Error< "incompatible function pointer types " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -8053,6 +8481,12 @@ def err_typecheck_convert_incompatible_function_pointer : Error< "; take the address with &|" "; remove *|" "; remove &}3">; +def ext_typecheck_convert_incompatible_function_pointer : ExtWarn< + err_typecheck_convert_incompatible_function_pointer.Summary>, + InGroup<IncompatibleFunctionPointerTypes>, DefaultError; +def warn_typecheck_convert_incompatible_function_pointer_strict : Warning< + err_typecheck_convert_incompatible_function_pointer.Summary>, + InGroup<DiagGroup<"incompatible-function-pointer-types-strict">>, DefaultIgnore; def ext_typecheck_convert_discards_qualifiers : ExtWarn< "%select{%diff{assigning to $ from $|assigning to different types}0,1" "|%diff{passing $ to parameter of type $|" @@ -8228,53 +8662,65 @@ def err_call_function_incomplete_return : Error< def err_call_incomplete_argument : Error< "argument type %0 is incomplete">; def err_typecheck_call_too_few_args : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " "expected %1, have %2">; def err_typecheck_call_too_few_args_one : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }2arguments to " "%select{function|block|method|kernel function}0 call, " "single argument %1 was not specified">; def err_typecheck_call_too_few_args_at_least : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " "expected at least %1, have %2">; def err_typecheck_call_too_few_args_at_least_one : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }2arguments to " "%select{function|block|method|kernel function}0 call, " "at least argument %1 must be specified">; def err_typecheck_call_too_few_args_suggest : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " - "expected %1, have %2; did you mean %3?">; + "expected %1, have %2; did you mean %4?">; def err_typecheck_call_too_few_args_at_least_suggest : Error< - "too few %select{|||execution configuration }0arguments to " + "too few %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " - "expected at least %1, have %2; did you mean %3?">; + "expected at least %1, have %2; did you mean %4?">; def err_typecheck_call_too_many_args : Error< - "too many %select{|||execution configuration }0arguments to " + "too many %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " "expected %1, have %2">; def err_typecheck_call_too_many_args_one : Error< - "too many %select{|||execution configuration }0arguments to " + "too many %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " "expected single argument %1, have %2 arguments">; def err_typecheck_call_too_many_args_at_most : Error< - "too many %select{|||execution configuration }0arguments to " + "too many %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " "expected at most %1, have %2">; def err_typecheck_call_too_many_args_at_most_one : Error< "too many %select{|||execution configuration }0arguments to " "%select{function|block|method|kernel function}0 call, " - "expected at most single argument %1, have %2 arguments">; + "expected at most single %select{|non-object }3argument %1, " + "have %2%select{|non-object}3 arguments">; def err_typecheck_call_too_many_args_suggest : Error< - "too many %select{|||execution configuration }0arguments to " + "too many %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " - "expected %1, have %2; did you mean %3?">; + "expected %1, have %2; did you mean %4?">; def err_typecheck_call_too_many_args_at_most_suggest : Error< - "too many %select{|||execution configuration }0arguments to " + "too many %select{|||execution configuration }0" + "%select{|non-object }3arguments to " "%select{function|block|method|kernel function}0 call, " - "expected at most %1, have %2; did you mean %3?">; + "expected at most %1, have %2; did you mean %4?">; def err_arc_typecheck_convert_incompatible_pointer : Error< "incompatible pointer types passing retainable parameter of type %0" @@ -8302,8 +8748,8 @@ def err_atomic_exclusive_builtin_pointer_size : Error< " 1,2,4 or 8 byte type (%0 invalid)">; def err_atomic_builtin_ext_int_size : Error< "Atomic memory operand must have a power-of-two size">; -def err_atomic_builtin_ext_int_prohibit : Error< - "argument to atomic builtin of type '_ExtInt' is not supported">; +def err_atomic_builtin_bit_int_prohibit : Error< + "argument to atomic builtin of type '_BitInt' is not supported">; def err_atomic_op_needs_atomic : Error< "address argument to atomic operation must be a pointer to _Atomic " "type (%0 invalid)">; @@ -8322,11 +8768,14 @@ def err_atomic_op_needs_atomic_int_ptr_or_fp : Error< def err_atomic_op_needs_atomic_int_or_ptr : Error< "address argument to atomic operation must be a pointer to %select{|atomic }0" "integer or pointer (%1 invalid)">; +def err_atomic_op_needs_atomic_int_or_fp : Error< + "address argument to atomic operation must be a pointer to %select{|atomic }0" + "integer or supported floating point type (%1 invalid)">; def err_atomic_op_needs_atomic_int : Error< "address argument to atomic operation must be a pointer to " "%select{|atomic }0integer (%1 invalid)">; def warn_atomic_op_has_invalid_memory_order : Warning< - "memory order argument to atomic operation is invalid">, + "%select{|success |failure }0memory order argument to atomic operation is invalid">, InGroup<DiagGroup<"atomic-memory-ordering">>; def err_atomic_op_has_invalid_synch_scope : Error< "synchronization scope argument to atomic operation is invalid">; @@ -8335,13 +8784,22 @@ def warn_atomic_implicit_seq_cst : Warning< InGroup<DiagGroup<"atomic-implicit-seq-cst">>, DefaultIgnore; def err_overflow_builtin_must_be_int : Error< - "operand argument to overflow builtin must be an integer (%0 invalid)">; + "operand argument to %select{overflow builtin|checked integer operation}0 " + "must be an integer type %select{|other than plain 'char', 'bool', bit-precise, " + "or an enumeration }0(%1 invalid)">; def err_overflow_builtin_must_be_ptr_int : Error< - "result argument to overflow builtin must be a pointer " - "to a non-const integer (%0 invalid)">; -def err_overflow_builtin_ext_int_max_size : Error< - "__builtin_mul_overflow does not support signed _ExtInt operands of more " + "result argument to %select{overflow builtin|checked integer operation}0 " + "must be a pointer to a non-const integer type %select{|other than plain 'char', " + "'bool', bit-precise, or an enumeration }0(%1 invalid)">; +def err_overflow_builtin_bit_int_max_size : Error< + "__builtin_mul_overflow does not support 'signed _BitInt' operands of more " "than %0 bits">; +def err_expected_struct_pointer_argument : Error< + "expected pointer to struct as %ordinal0 argument to %1, found %2">; +def err_expected_callable_argument : Error< + "expected a callable expression as %ordinal0 argument to %1, found %2">; +def note_building_builtin_dump_struct_call : Note< + "in call to printing function with arguments '(%0)' while dumping struct">; def err_atomic_load_store_uses_lib : Error< "atomic %select{load|store}0 requires runtime support that is not " @@ -8380,8 +8838,10 @@ def err_ref_bad_target_global_initializer : Error< "function %1 in global initializer">; def err_capture_bad_target : Error< "capture host variable %0 by reference in device or host device lambda function">; -def err_capture_bad_target_this_ptr : Error< - "capture host side class data member by this pointer in device or host device lambda function">; +def warn_maybe_capture_bad_target_this_ptr : Warning< + "capture host side class data member by this pointer in device or host device lambda function " + "may result in invalid memory access if this pointer is not accessible on device side">, + InGroup<DiagGroup<"gpu-maybe-wrong-side">>; def warn_kern_is_method : Extension< "kernel function %0 is a member function; this may not be accepted by nvcc">, InGroup<CudaCompat>; @@ -8391,8 +8851,8 @@ def warn_kern_is_inline : Warning< def err_variadic_device_fn : Error< "CUDA device code does not support variadic functions">; def err_va_arg_in_device : Error< - "CUDA device code does not support va_arg">; -def err_alias_not_supported_on_nvptx : Error<"CUDA does not support aliases">; +"CUDA device code does not support va_arg">; +def err_alias_not_supported_on_nvptx : Error<"CUDA older than 10.0 does not support .alias">; def err_cuda_unattributed_constexpr_cannot_overload_device : Error< "constexpr function %0 without __host__ or __device__ attributes cannot " "overload __device__ function with same signature. Add a __host__ " @@ -8441,6 +8901,10 @@ def note_cuda_device_builtin_surftex_should_be_template_class : Note< def err_hip_invalid_args_builtin_mangled_name : Error< "invalid argument: symbol must be a device-side function or global variable">; +def warn_hip_omp_target_directives : Warning< + "HIP does not support OpenMP target directives; directive has been ignored">, + InGroup<HIPOpenMPOffloading>, DefaultError; + def warn_non_pod_vararg_with_format_string : Warning< "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic " "%select{function|block|method|constructor}2; expected type from format " @@ -8527,10 +8991,13 @@ def warn_bad_function_cast : Warning< def warn_cast_function_type : Warning< "cast %diff{from $ to $ |}0,1converts to incompatible function type">, InGroup<CastFunctionType>, DefaultIgnore; +def warn_cast_function_type_strict : Warning<warn_cast_function_type.Summary>, + InGroup<CastFunctionTypeStrict>, DefaultIgnore; def err_cast_pointer_to_non_pointer_int : Error< "pointer cannot be cast to type %0">; -def err_cast_to_bfloat16 : Error<"cannot type-cast to __bf16">; -def err_cast_from_bfloat16 : Error<"cannot type-cast from __bf16">; +def err_nullptr_cast : Error< + "cannot cast an object of type %select{'nullptr_t' to %1|%1 to 'nullptr_t'}0" +>; def err_typecheck_expect_scalar_operand : Error< "operand of type %0 where arithmetic or pointer type is required">; def err_typecheck_cond_incompatible_operands : Error< @@ -8540,6 +9007,10 @@ def err_typecheck_expect_flt_or_vector : Error< "a vector of such types is required">; def err_cast_selector_expr : Error< "cannot type cast @selector expression">; +def err_make_signed_integral_only : Error< + "'%select{make_unsigned|make_signed}0' is only compatible with " + "non-%select{bool|_BitInt(1)}1 integers and enum types, but was given " + "%2%select{| whose underlying type is %4}3">; def ext_typecheck_cond_incompatible_pointers : ExtWarn< "pointer type mismatch%diff{ ($ and $)|}0,1">, InGroup<DiagGroup<"pointer-type-mismatch">>; @@ -8551,6 +9022,9 @@ def err_typecheck_choose_expr_requires_constant : Error< "'__builtin_choose_expr' requires a constant expression">; def warn_unused_expr : Warning<"expression result unused">, InGroup<UnusedValue>; +def warn_unused_comma_left_operand : Warning< + "left operand of comma operator has no effect">, + InGroup<UnusedValue>; def warn_unused_voidptr : Warning< "expression result unused; should this cast be to 'void'?">, InGroup<UnusedValue>; @@ -8581,16 +9055,20 @@ def warn_unused_result : Warning< def warn_unused_result_msg : Warning< "ignoring return value of function declared with %0 attribute: %1">, InGroup<UnusedResult>; +def warn_unused_result_typedef_unsupported_spelling : Warning< + "'[[%select{nodiscard|gnu::warn_unused_result}0]]' attribute ignored when " + "applied to a typedef; consider using '__attribute__((warn_unused_result))' " + "or '[[clang::warn_unused_result]]' instead">, InGroup<IgnoredAttributes>; def warn_unused_volatile : Warning< "expression result unused; assign into a variable to force a volatile load">, InGroup<DiagGroup<"unused-volatile-lvalue">>; def ext_cxx14_attr : Extension< - "use of the %0 attribute is a C++14 extension">, InGroup<CXX14>; + "use of the %0 attribute is a C++14 extension">, InGroup<CXX14Attrs>; def ext_cxx17_attr : Extension< - "use of the %0 attribute is a C++17 extension">, InGroup<CXX17>; + "use of the %0 attribute is a C++17 extension">, InGroup<CXX17Attrs>; def ext_cxx20_attr : Extension< - "use of the %0 attribute is a C++20 extension">, InGroup<CXX20>; + "use of the %0 attribute is a C++20 extension">, InGroup<CXX20Attrs>; def warn_unused_comparison : Warning< "%select{equality|inequality|relational|three-way}0 comparison result unused">, @@ -8654,6 +9132,9 @@ def warn_redefine_extname_not_applied : Warning< // inline asm. let CategoryName = "Inline Assembly Issue" in { + def err_asm_pmf_through_constraint_not_permitted + : Error<"cannot pass a pointer-to-member through register-constrained " + "inline assembly parameter">; def err_asm_invalid_lvalue_in_output : Error<"invalid lvalue in asm output">; def err_asm_invalid_output_constraint : Error< "invalid output constraint '%0' in asm">; @@ -8688,6 +9169,8 @@ let CategoryName = "Inline Assembly Issue" in { " in asm %select{input|output}1 with a memory constraint '%2'">; def err_asm_input_duplicate_match : Error< "more than one input constraint matches the same output '%0'">; + def err_store_value_to_reg : Error< + "impossible constraint in asm: can't store value into a register">; def warn_asm_label_on_auto_decl : Warning< "ignored asm label '%0' on automatic variable">; @@ -8857,6 +9340,14 @@ def ext_ms_anonymous_record : ExtWarn< def err_reference_to_local_in_enclosing_context : Error< "reference to local %select{variable|binding}1 %0 declared in enclosing " "%select{%3|block literal|lambda expression|context}2">; +def err_capture_binding_openmp : Error< + "capturing a structured binding is not yet supported in OpenMP">; +def ext_capture_binding : ExtWarn< + "captured structured bindings are a C++20 extension">, InGroup<CXX20>; +def warn_cxx17_compat_capture_binding : Warning< + "captured structured bindings are incompatible with " + "C++ standards before C++20">, + InGroup<CXXPre20Compat>, DefaultIgnore; def err_static_data_member_not_allowed_in_local_class : Error< "static data member %0 not allowed in local %sub{select_tag_type_kind}2 %1">; @@ -8910,10 +9401,22 @@ def err_operator_overload_needs_class_or_enum : Error< "or enumeration type">; def err_operator_overload_variadic : Error<"overloaded %0 cannot be variadic">; +def warn_cxx20_compat_operator_overload_static : Warning< + "declaring overloaded %0 as 'static' is incompatible with C++ standards " + "before C++23">, InGroup<CXXPre23Compat>, DefaultIgnore; +def ext_operator_overload_static : ExtWarn< + "declaring overloaded %0 as 'static' is a C++23 extension">, InGroup<CXX23>; def err_operator_overload_static : Error< "overloaded %0 cannot be a static member function">; def err_operator_overload_default_arg : Error< "parameter of overloaded %0 cannot have a default argument">; + +def ext_subscript_overload : Warning< + "overloaded %0 with %select{no|a defaulted|more than one}1 parameter is a " + "C++23 extension">, InGroup<CXXPre23Compat>, DefaultIgnore; +def error_subscript_overload : Error< + "overloaded %0 cannot have %select{no|a defaulted|more than one}1 parameter before C++23">; + def err_operator_overload_must_be : Error< "overloaded %0 must be a %select{unary|binary|unary or binary}2 operator " "(has %1 parameter%s1)">; @@ -8989,8 +9492,8 @@ def ext_string_literal_operator_template : ExtWarn< "string literal operator templates are a GNU extension">, InGroup<GNUStringLiteralOperatorTemplate>; def warn_user_literal_reserved : Warning< - "user-defined literal suffixes not starting with '_' are reserved" - "%select{; no literal will invoke this operator|}0">, + "user-defined literal suffixes %select{<ERROR>|not starting with '_'|containing '__'}0 are reserved" + "%select{; no literal will invoke this operator|}1">, InGroup<UserDefinedLiterals>; // C++ conversion functions @@ -9038,10 +9541,10 @@ def warn_cxx98_compat_explicit_conversion_functions : Warning< // C++11 defaulted functions def err_defaulted_special_member_params : Error< - "an explicitly-defaulted %select{|copy |move }0constructor cannot " + "an explicitly-defaulted %sub{select_special_member_kind}0 cannot " "have default arguments">; def err_defaulted_special_member_variadic : Error< - "an explicitly-defaulted %select{|copy |move }0constructor cannot " + "an explicitly-defaulted %sub{select_special_member_kind}0 cannot " "be variadic">; def err_defaulted_special_member_return_type : Error< "explicitly-defaulted %select{copy|move}0 assignment operator must " @@ -9049,6 +9552,9 @@ def err_defaulted_special_member_return_type : Error< def err_defaulted_special_member_quals : Error< "an explicitly-defaulted %select{copy|move}0 assignment operator may not " "have 'const'%select{, 'constexpr'|}1 or 'volatile' qualifiers">; +def err_defaulted_special_member_explicit_object_mismatch : Error< + "the type of the explicit object parameter of an explicitly-defaulted " + "%select{copy|move}0 assignment operator should match the type of the class %1">; def err_defaulted_special_member_volatile_param : Error< "the parameter for an explicitly-defaulted %sub{select_special_member_kind}0 " "may not be volatile">; @@ -9065,12 +9571,16 @@ def err_defaulted_copy_assign_not_ref : Error< def err_incorrect_defaulted_constexpr : Error< "defaulted definition of %sub{select_special_member_kind}0 " "is not constexpr">; +def err_incorrect_defaulted_constexpr_with_vb: Error< + "%sub{select_special_member_kind}0 cannot be 'constexpr' in a class with virtual base class">; def err_incorrect_defaulted_consteval : Error< "defaulted declaration of %sub{select_special_member_kind}0 " "cannot be consteval because implicit definition is not constexpr">; def warn_defaulted_method_deleted : Warning< "explicitly defaulted %sub{select_special_member_kind}0 is implicitly " "deleted">, InGroup<DefaultedFunctionDeleted>; +def note_replace_equals_default_to_delete : Note< + "replace 'default' with 'delete'">; def err_out_of_line_default_deletes : Error< "defaulting this %sub{select_special_member_kind}0 " "would delete it after its first declaration">; @@ -9100,15 +9610,22 @@ def warn_cxx17_compat_defaulted_comparison : Warning< "before C++20">, InGroup<CXXPre20Compat>, DefaultIgnore; def err_defaulted_comparison_template : Error< "comparison operator template cannot be defaulted">; -def err_defaulted_comparison_out_of_class : Error< - "%sub{select_defaulted_comparison_kind}0 can only be defaulted in a class " - "definition">; +def err_defaulted_comparison_num_args : Error< + "%select{non-member|member}0 %sub{select_defaulted_comparison_kind}1" + " must have %select{2|1}0 parameters">; def err_defaulted_comparison_param : Error< "invalid parameter type for defaulted %sub{select_defaulted_comparison_kind}0" "; found %1, expected %2%select{| or %4}3">; +def err_defaulted_comparison_param_unknown : Error< + "invalid parameter type for non-member defaulted" + " %sub{select_defaulted_comparison_kind}0" + "; found %1, expected class or reference to a constant class">; def err_defaulted_comparison_param_mismatch : Error< "parameters for defaulted %sub{select_defaulted_comparison_kind}0 " "must have the same type%diff{ (found $ vs $)|}1,2">; +def err_defaulted_comparison_not_friend : Error< + "%sub{select_defaulted_comparison_kind}0 is not a friend of" + " %select{|incomplete class }1%2">; def err_defaulted_comparison_non_const : Error< "defaulted member %sub{select_defaulted_comparison_kind}0 must be " "const-qualified">; @@ -9125,6 +9642,9 @@ def err_non_first_default_compare_deletes : Error< "defaulting %select{this %sub{select_defaulted_comparison_kind}1|" "the corresponding implicit 'operator==' for this defaulted 'operator<=>'}0 " "would delete it after its first declaration">; +def err_non_first_default_compare_in_class : Error< + "defaulting this %sub{select_defaulted_comparison_kind}0 " + "is not allowed because it was already declared outside the class">; def note_defaulted_comparison_union : Note< "defaulted %0 is implicitly deleted because " "%2 is a %select{union-like class|union}1 with variant members">; @@ -9142,14 +9662,18 @@ def note_defaulted_comparison_calls_deleted : Note< "defaulted %0 is implicitly deleted because it would invoke a deleted " "comparison function%select{| for member %2| for base class %2}1">; def note_defaulted_comparison_no_viable_function : Note< - "defaulted %0 is implicitly deleted because there is no viable three-way " - "comparison function for%select{| member| base class}1 %2">; + "defaulted %0 is implicitly deleted because there is no viable " + "%select{three-way comparison function|'operator=='}1 for " + "%select{|member |base class }2%3">; def note_defaulted_comparison_no_viable_function_synthesized : Note< "three-way comparison cannot be synthesized because there is no viable " "function for %select{'=='|'<'}0 comparison">; def note_defaulted_comparison_not_rewritten_callee : Note< "defaulted %0 is implicitly deleted because this non-rewritten comparison " "function would be the best match for the comparison">; +def note_defaulted_comparison_not_rewritten_conversion : Note< + "defaulted %0 is implicitly deleted because a builtin comparison function " + "using this conversion would be the best match for the comparison">; def note_defaulted_comparison_cannot_deduce : Note< "return type of defaulted 'operator<=>' cannot be deduced because " "return type %2 of three-way comparison for %select{|member|base class}0 %1 " @@ -9162,12 +9686,21 @@ def note_defaulted_comparison_cannot_deduce_undeduced_auto : Note< "%select{|member|base class}0 %1 declared here">; def note_defaulted_comparison_cannot_deduce_callee : Note< "selected 'operator<=>' for %select{|member|base class}0 %1 declared here">; -def err_incorrect_defaulted_comparison_constexpr : Error< +def ext_defaulted_comparison_constexpr_mismatch : Extension< "defaulted definition of %select{%sub{select_defaulted_comparison_kind}1|" - "three-way comparison operator}0 " - "cannot be declared %select{constexpr|consteval}2 because " - "%select{it|the corresponding implicit 'operator=='}0 " - "invokes a non-constexpr comparison function">; + "three-way comparison operator}0 that is " + "declared %select{constexpr|consteval}2 but" + "%select{|for which the corresponding implicit 'operator==' }0 " + "invokes a non-constexpr comparison function is a C++23 extension">, + InGroup<DiagGroup<"c++23-default-comp-relaxed-constexpr">>; +def warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : Warning< + "defaulted definition of %select{%sub{select_defaulted_comparison_kind}1|" + "three-way comparison operator}0 that is " + "declared %select{constexpr|consteval}2 but" + "%select{|for which the corresponding implicit 'operator==' }0 " + "invokes a non-constexpr comparison function is incompatible with C++ " + "standards before C++23">, + InGroup<CXXPre23Compat>, DefaultIgnore; def note_defaulted_comparison_not_constexpr : Note< "non-constexpr comparison function would be used to compare " "%select{|member %1|base class %1}0">; @@ -9176,6 +9709,10 @@ def note_defaulted_comparison_not_constexpr_here : Note< def note_in_declaration_of_implicit_equality_comparison : Note< "while declaring the corresponding implicit 'operator==' " "for this defaulted 'operator<=>'">; +def err_volatile_comparison_operator : Error< + "defaulted comparison function must not be volatile">; +def err_ref_qualifier_comparison_operator : Error< + "ref-qualifier '&&' is not allowed on a defaulted comparison operator">; def ext_implicit_exception_spec_mismatch : ExtWarn< "function previously declared with an %select{explicit|implicit}0 exception " @@ -9186,15 +9723,14 @@ def warn_ptr_arith_precedes_bounds : Warning< "the pointer decremented by %0 refers before the beginning of the array">, InGroup<ArrayBoundsPointerArithmetic>, DefaultIgnore; def warn_ptr_arith_exceeds_bounds : Warning< - "the pointer incremented by %0 refers past the end of the array (that " - "contains %1 element%s2)">, + "the pointer incremented by %0 refers past the end of the array (that has type %1)">, InGroup<ArrayBoundsPointerArithmetic>, DefaultIgnore; def warn_array_index_precedes_bounds : Warning< "array index %0 is before the beginning of the array">, InGroup<ArrayBounds>; def warn_array_index_exceeds_bounds : Warning< - "array index %0 is past the end of the array (which contains %1 " - "element%s2)">, InGroup<ArrayBounds>; + "array index %0 is past the end of the array (that has type %1%select{|, cast to %3}2)">, + InGroup<ArrayBounds>; def warn_ptr_arith_exceeds_max_addressable_bounds : Warning< "the pointer incremented by %0 refers past the last possible element for an array in %1-bit " "address space containing %2-bit (%3-byte) elements (max possible %4 element%s5)">, @@ -9206,6 +9742,12 @@ def warn_array_index_exceeds_max_addressable_bounds : Warning< def note_array_declared_here : Note< "array %0 declared here">; +def warn_inconsistent_array_form : Warning< + "argument %0 of type %1 with mismatched bound">, + InGroup<ArrayParameter>, DefaultIgnore; +def note_previous_declaration_as : Note< + "previously declared as %0 here">; + def warn_printf_insufficient_data_args : Warning< "more '%%' conversions than data arguments">, InGroup<FormatInsufficientArgs>; def warn_printf_data_arg_not_used : Warning< @@ -9224,17 +9766,17 @@ def warn_format_conversion_argument_type_mismatch : Warning< "%select{type|underlying type}2 %1">, InGroup<Format>; def warn_format_conversion_argument_type_mismatch_pedantic : Extension< - warn_format_conversion_argument_type_mismatch.Text>, + warn_format_conversion_argument_type_mismatch.Summary>, InGroup<FormatPedantic>; def warn_format_conversion_argument_type_mismatch_confusion : Warning< - warn_format_conversion_argument_type_mismatch.Text>, + warn_format_conversion_argument_type_mismatch.Summary>, InGroup<FormatTypeConfusion>, DefaultIgnore; def warn_format_argument_needs_cast : Warning< "%select{values of type|enum values with underlying type}2 '%0' should not " "be used as format arguments; add an explicit cast to %1 instead">, InGroup<Format>; def warn_format_argument_needs_cast_pedantic : Warning< - warn_format_argument_needs_cast.Text>, + warn_format_argument_needs_cast.Summary>, InGroup<FormatPedantic>, DefaultIgnore; def warn_printf_positional_arg_exceeds_data_args : Warning < "data argument position '%0' exceeds the number of data arguments (%1)">, @@ -9305,6 +9847,9 @@ def warn_printf_ObjCflags_without_ObjCConversion: Warning< def warn_printf_invalid_objc_flag: Warning< "'%0' is not a valid object format flag">, InGroup<Format>; +def warn_printf_narg_not_supported : Warning< + "'%%n' specifier not supported on this platform">, + InGroup<Format>; def warn_scanf_scanlist_incomplete : Warning< "no closing ']' for '%%[' in scanf format string">, InGroup<Format>; @@ -9351,7 +9896,7 @@ def note_lambda_capture_initializer : Note< "%select{implicitly |}2captured%select{| by reference}3" "%select{%select{ due to use|}2 here|" " via initialization of lambda capture %0}1">; -def note_init_with_default_member_initalizer : Note< +def note_init_with_default_member_initializer : Note< "initializing field %0 with default member initializer">; // Check for initializing a member variable with the address or a reference to @@ -9410,10 +9955,10 @@ def warn_new_dangling_initializer_list : Warning< "will be destroyed at the end of the full-expression">, InGroup<DanglingInitializerList>; def warn_unsupported_lifetime_extension : Warning< - "sorry, lifetime extension of " + "lifetime extension of " "%select{temporary|backing array of initializer list}0 created " - "by aggregate initialization using default member initializer " - "is not supported; lifetime of %select{temporary|backing array}0 " + "by aggregate initialization using a default member initializer " + "is not yet supported; lifetime of %select{temporary|backing array}0 " "will end at the end of the full-expression">, InGroup<Dangling>; // For non-floating point, expressions of the form x == x or x != x @@ -9429,6 +9974,12 @@ def warn_comparison_bitwise_always : Warning< def warn_comparison_bitwise_or : Warning< "bitwise or with non-zero value always evaluates to true">, InGroup<TautologicalBitwiseCompare>, DefaultIgnore; +def warn_tautological_negation_and_compare: Warning< + "'&&' of a value and its negation always evaluates to false">, + InGroup<TautologicalNegationCompare>, DefaultIgnore; +def warn_tautological_negation_or_compare: Warning< + "'||' of a value and its negation always evaluates to true">, + InGroup<TautologicalNegationCompare>, DefaultIgnore; def warn_tautological_overlap_comparison : Warning< "overlapping comparisons always evaluate to %select{false|true}0">, InGroup<TautologicalOverlapCompare>, DefaultIgnore; @@ -9484,7 +10035,8 @@ def err_generic_sel_multi_match : Error< // Blocks def err_blocks_disable : Error<"blocks support disabled - compile with -fblocks" - " or %select{pick a deployment target that supports them|for OpenCL 2.0}0">; + " or %select{pick a deployment target that supports them|for OpenCL C 2.0" + " or OpenCL C 3.0 with __opencl_c_device_enqueue feature}0">; def err_block_returning_array_function : Error< "block cannot return %select{array|function}0 type %1">; @@ -9521,6 +10073,11 @@ def err_break_not_in_loop_or_switch : Error< def warn_loop_ctrl_binds_to_inner : Warning< "'%0' is bound to current loop, GCC binds it to the enclosing loop">, InGroup<GccCompat>; +def err_omp_bind_required_on_loop : Error< + "expected 'bind' clause for 'loop' construct without an enclosing OpenMP " + "construct">; +def err_omp_loop_reduction_clause : Error< + "'reduction' clause not allowed with '#pragma omp loop bind(teams)'">; def warn_break_binds_to_switch : Warning< "'break' is bound to loop, GCC binds it to switch">, InGroup<GccCompat>; @@ -9538,6 +10095,11 @@ def err_duplicate_case_differing_expr : Error< def warn_case_empty_range : Warning<"empty case range specified">; def warn_missing_case_for_condition : Warning<"no case matching constant switch condition '%0'">; +def err_loop_attr_conflict : Error< + "conflicting loop attribute %0">; +def err_attribute_power_of_two_in_range : Error< + "%0 attribute requires an integer argument which is a constant power of two " + "between %1 and %2 inclusive; provided argument was %3">; def warn_def_missing_case : Warning<"%plural{" "1:enumeration value %1 not explicitly handled in switch|" @@ -9552,6 +10114,8 @@ def warn_missing_case : Warning<"%plural{" "3:enumeration values %1, %2, and %3 not handled in switch|" ":%0 enumeration values not handled in switch: %1, %2, %3...}0">, InGroup<Switch>; +def warn_switch_default : Warning<"'switch' missing 'default' label">, + InGroup<SwitchDefault>, DefaultIgnore; def warn_unannotated_fallthrough : Warning< "unannotated fall-through between switch labels">, @@ -9570,9 +10134,6 @@ def err_fallthrough_attr_outside_switch : Error< "fallthrough annotation is outside switch statement">; def err_fallthrough_attr_invalid_placement : Error< "fallthrough annotation does not directly precede switch label">; -def warn_fallthrough_attr_unreachable : Warning< - "fallthrough annotation in unreachable code">, - InGroup<ImplicitFallthrough>, DefaultIgnore; def warn_unreachable_default : Warning< "default label in switch which covers all enumeration values">, @@ -9623,6 +10184,9 @@ def err_ms_va_start_used_in_sysv_function : Error< def warn_second_arg_of_va_start_not_last_named_param : Warning< "second argument to 'va_start' is not the last named parameter">, InGroup<Varargs>; +def warn_c17_compat_ellipsis_only_parameter : Warning< + "'...' as the only parameter of a function is incompatible with C standards " + "before C23">, DefaultIgnore, InGroup<CPre23Compat>; def warn_va_start_type_is_undefined : Warning< "passing %select{an object that undergoes default argument promotion|" "an object of reference type|a parameter declared with the 'register' " @@ -9668,10 +10232,6 @@ def warn_falloff_noreturn_function : Warning< InGroup<InvalidNoreturn>; def err_noreturn_block_has_return_expr : Error< "block declared 'noreturn' should not return">; -def err_noreturn_missing_on_first_decl : Error< - "function declared '[[noreturn]]' after its first declaration">; -def note_noreturn_missing_first_decl : Note< - "declaration missing '[[noreturn]]' attribute is here">; def err_carries_dependency_missing_on_first_decl : Error< "%select{function|parameter}0 declared '[[carries_dependency]]' " "after its first declaration">; @@ -9702,8 +10262,8 @@ def err_shufflevector_argument_too_large : Error< def err_convertvector_non_vector : Error< "first argument to __builtin_convertvector must be a vector">; -def err_convertvector_non_vector_type : Error< - "second argument to __builtin_convertvector must be a vector type">; +def err_builtin_non_vector_type : Error< + "%0 argument to %1 must be of vector type">; def err_convertvector_incompatible_vector : Error< "first two arguments to __builtin_convertvector must have the same number of elements">; @@ -9729,6 +10289,9 @@ def err_argument_invalid_range : Error< def warn_argument_invalid_range : Warning< "argument value %0 is outside the valid range [%1, %2]">, DefaultError, InGroup<DiagGroup<"argument-outside-range">>; +def warn_argument_undefined_behaviour : Warning< + "argument value %0 will result in undefined behaviour">, + InGroup<DiagGroup<"argument-undefined-behaviour">>; def err_argument_not_multiple : Error< "argument should be a multiple of %0">; def err_argument_not_power_of_2 : Error< @@ -9739,10 +10302,10 @@ def err_argument_not_shifted_byte_or_xxff : Error< "argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF">; def err_argument_not_contiguous_bit_field : Error< "argument %0 value should represent a contiguous bit field">; -def err_rotation_argument_to_cadd - : Error<"argument should be the value 90 or 270">; -def err_rotation_argument_to_cmla - : Error<"argument should be the value 0, 90, 180 or 270">; +def err_rotation_argument_to_cadd : Error< + "argument should be the value 90 or 270">; +def err_rotation_argument_to_cmla : Error< + "argument should be the value 0, 90, 180 or 270">; def warn_neon_vector_initializer_non_portable : Warning< "vector initializers are not compatible with NEON intrinsics in big endian " "mode">, InGroup<DiagGroup<"nonportable-vector-initialization">>; @@ -9767,10 +10330,12 @@ def err_mips_builtin_requires_dspr2 : Error< "this builtin requires 'dsp r2' ASE, please use -mdspr2">; def err_mips_builtin_requires_msa : Error< "this builtin requires 'msa' ASE, please use -mmsa">; -def err_ppc_builtin_only_on_arch : Error< - "this builtin is only valid on POWER%0 or later CPUs">; +def err_ppc_builtin_requires_abi : Error< + "this builtin requires ABI -mabi=%0">; def err_ppc_invalid_use_mma_type : Error< "invalid use of PPC MMA type">; +def err_ppc_invalid_test_data_class_type : Error< + "expected a 'float', 'double' or '__float128' for the first argument">; def err_x86_builtin_invalid_rounding : Error< "invalid rounding argument">; def err_x86_builtin_invalid_scale : Error< @@ -9793,8 +10358,11 @@ def err_constant_integer_arg_type : Error< "argument to %0 must be a constant integer">; def ext_mixed_decls_code : Extension< - "ISO C90 forbids mixing declarations and code">, - InGroup<DiagGroup<"declaration-after-statement">>; + "mixing declarations and code is a C99 extension">, + InGroup<DeclarationAfterStatement>; +def warn_mixed_decls_code : Warning< + "mixing declarations and code is incompatible with standards before C99">, + InGroup<DeclarationAfterStatement>, DefaultIgnore; def err_non_local_variable_decl_in_for : Error< "declaration of non-local variable in 'for' loop">; @@ -9822,6 +10390,8 @@ def warn_duplicate_attribute_exact : Warning< def warn_duplicate_attribute : Warning< "attribute %0 is already applied with different arguments">, InGroup<IgnoredAttributes>; +def err_disallowed_duplicate_attribute : Error< + "attribute %0 cannot appear more than once on a declaration">; def warn_sync_fetch_and_nand_semantics_change : Warning< "the semantics of this intrinsic changed with GCC " @@ -9835,15 +10405,13 @@ def warn_receiver_forward_class : Warning< "receiver %0 is a forward class and corresponding @interface may not exist">, InGroup<ForwardClassReceiver>; def note_method_sent_forward_class : Note<"method %0 is used for the forward class">; -def ext_missing_declspec : ExtWarn< - "declaration specifier missing, defaulting to 'int'">; def ext_missing_type_specifier : ExtWarn< - "type specifier missing, defaults to 'int'">, - InGroup<ImplicitInt>; + "type specifier missing, defaults to 'int'; ISO C99 and later do not support " + "implicit int">, InGroup<ImplicitInt>; +def err_missing_type_specifier : Error< + "a type specifier is required for all declarations">; def err_decimal_unsupported : Error< "GNU decimal type extension not supported">; -def err_missing_type_specifier : Error< - "C++ requires a type specifier for all declarations">; def err_objc_array_of_interfaces : Error< "array of interface %0 is invalid (probably should be an array of pointers)">; def ext_c99_array_usage : Extension< @@ -9866,9 +10434,9 @@ def err_nserrordomain_wrong_type : Error< "domain argument %0 does not point to an NSString or CFString constant">; def warn_nsconsumed_attribute_mismatch : Warning< - err_nsconsumed_attribute_mismatch.Text>, InGroup<NSConsumedMismatch>; + err_nsconsumed_attribute_mismatch.Summary>, InGroup<NSConsumedMismatch>; def warn_nsreturns_retained_attribute_mismatch : Warning< - err_nsreturns_retained_attribute_mismatch.Text>, InGroup<NSReturnsMismatch>; + err_nsreturns_retained_attribute_mismatch.Summary>, InGroup<NSReturnsMismatch>; def note_getter_unavailable : Note< "or because setter is declared here, but no getter method %0 is found">; @@ -10036,8 +10604,6 @@ def err_opencl_scalar_type_rank_greater_than_vector_type : Error< "element. (%0 and %1)">; def err_bad_kernel_param_type : Error< "%0 cannot be used as the type of a kernel parameter">; -def err_opencl_implicit_function_decl : Error< - "implicit declaration of function %0 is invalid in OpenCL">; def err_record_with_pointers_kernel_param : Error< "%select{struct|union}0 kernel parameters may not contain pointers">; def note_within_field_of_type : Note< @@ -10071,8 +10637,8 @@ def err_reference_pipe_type : Error < def err_opencl_no_main : Error<"%select{function|kernel}0 cannot be called 'main'">; def err_opencl_kernel_attr : Error<"attribute %0 can only be applied to an OpenCL kernel function">; -def err_opencl_return_value_with_address_space : Error< - "return value cannot be qualified with address space">; +def err_return_value_with_address_space : Error< + "return type cannot be qualified with address space">; def err_opencl_constant_no_init : Error< "variable in constant address space must be initialized">; def err_opencl_atomic_init: Error< @@ -10091,8 +10657,7 @@ def err_opencl_type_can_only_be_used_as_function_parameter : Error < def err_opencl_type_not_found : Error< "%0 type %1 not found; include the base header with -finclude-default-header">; def warn_opencl_attr_deprecated_ignored : Warning < - "%0 attribute is deprecated and ignored in OpenCL version %1">, - InGroup<IgnoredAttributes>; + "%0 attribute is deprecated and ignored in %1">, InGroup<IgnoredAttributes>; def err_opencl_variadic_function : Error< "invalid prototype, variadic arguments are not allowed in OpenCL">; def err_opencl_requires_extension : Error< @@ -10157,7 +10722,7 @@ def err_opencl_builtin_expected_type : Error< // OpenCL v3.0 s6.3.7 - Vector Components def ext_opencl_ext_vector_type_rgba_selector: ExtWarn< - "vector component name '%0' is an OpenCL C version 3.0 feature">, + "vector component name '%0' is a feature from OpenCL version 3.0 onwards">, InGroup<OpenCLUnsupportedRGBA>; def err_openclcxx_placement_new : Error< @@ -10167,6 +10732,11 @@ def err_openclcxx_placement_new : Error< def warn_mig_server_routine_does_not_return_kern_return_t : Warning< "'mig_server_routine' attribute only applies to routines that return a kern_return_t">, InGroup<IgnoredAttributes>; + +def warn_imp_cast_drops_unaligned : Warning< + "implicit cast from type %0 to type %1 drops __unaligned qualifier">, + InGroup<DiagGroup<"unaligned-qualifier-implicit-cast">>; + } // end of sema category let CategoryName = "OpenMP Issue" in { @@ -10196,10 +10766,20 @@ def err_omp_lastprivate_incomplete_type : Error< "a lastprivate variable with incomplete type %0">; def err_omp_reduction_incomplete_type : Error< "a reduction list item with incomplete type %0">; +def warn_omp_minus_in_reduction_deprecated : Warning< + "minus(-) operator for reductions is deprecated; use + or user defined reduction instead">, + InGroup<Deprecated>; def err_omp_unexpected_clause_value : Error< "expected %0 in OpenMP clause '%1'">; +def err_omp_unexpected_call_to_omp_runtime_api + : Error<"calls to OpenMP runtime API are not allowed within a region that " + "corresponds to a construct with an order clause that specifies " + "concurrent">; def err_omp_expected_var_name_member_expr : Error< "expected variable name%select{| or data member of current class}0">; +def err_omp_expected_var_name_member_expr_with_type : Error< + "expected variable%select{| or static data member|, static data member, " + "or non-static data member of current class}0 of type '%1'">; def err_omp_expected_var_name_member_expr_or_array_item : Error< "expected variable name%select{|, data member of current class}0, array element or array section">; def err_omp_expected_addressable_lvalue_or_array_item : Error< @@ -10353,9 +10933,12 @@ def err_omp_simd_region_cannot_use_stmt : Error< def warn_omp_loop_64_bit_var : Warning< "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed">, InGroup<OpenMPLoopForm>; -def err_omp_unknown_reduction_identifier : Error< +def err_omp_unknown_reduction_identifier_prior_omp_6_0 : Error< "incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', " "'&&', '||', 'min' or 'max' or declare reduction for type %0">; +def err_omp_unknown_reduction_identifier_since_omp_6_0 : Error< + "incorrect reduction identifier, expected one of '+', '*', '&', '|', '^', " + "'&&', '||', 'min' or 'max' or declare reduction for type %0">; def err_omp_not_resolved_reduction_identifier : Error< "unable to resolve declare reduction construct for type %0">; def err_omp_reduction_ref_type_arg : Error< @@ -10389,6 +10972,9 @@ def err_omp_prohibited_region_simd : Error< "OpenMP constructs may not be nested inside a simd region%select{| except for ordered simd, simd, scan, or atomic directive}0">; def err_omp_prohibited_region_atomic : Error< "OpenMP constructs may not be nested inside an atomic region">; +def err_omp_prohibited_region_order + : Error<"construct '%0' not allowed in a region associated with a " + "directive with 'order' clause">; def err_omp_prohibited_region_critical_same_name : Error< "cannot nest 'critical' regions having the same name %0">; def note_omp_previous_critical_region : Note< @@ -10438,8 +11024,25 @@ def err_omp_atomic_capture_not_compound_statement : Error< " where x is an lvalue expression with scalar type">; def note_omp_atomic_capture: Note< "%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0">; +def err_omp_atomic_compare : Error< + "the statement for 'atomic compare' must be a compound statement of form '{x = expr ordop x ? expr : x;}', '{x = x ordop expr? expr : x;}'," + " '{x = x == e ? d : x;}', '{x = e == x ? d : x;}', or 'if(expr ordop x) {x = expr;}', 'if(x ordop expr) {x = expr;}', 'if(x == e) {x = d;}'," + " 'if(e == x) {x = d;}' where 'x' is an lvalue expression with scalar type, 'expr', 'e', and 'd' are expressions with scalar type," + " and 'ordop' is one of '<' or '>'.">; +def err_omp_atomic_compare_capture : Error< + "the statement for 'atomic compare capture' must be a compound statement of form '{v = x; cond-up-stmt}', ''{cond-up-stmt v = x;}', '{if(x == e) {x = d;} else {v = x;}}'," + " '{r = x == e; if(r) {x = d;}}', or '{r = x == e; if(r) {x = d;} else {v = x;}}', where 'cond-update-stmt' can have one of the following forms: 'if(expr ordop x) {x = expr;}'," + " 'if(x ordop expr) {x = expr;}', 'if(x == e) {x = d;}', or 'if(e == x) {x = d;}' where 'x', 'r', and 'v' are lvalue expressions with scalar type, 'expr', 'e', and 'd' are expressions with scalar type," + " and 'ordop' is one of '<' or '>'.">; +def note_omp_atomic_compare: Note< + "%select{expected compound statement|expected exactly one expression statement|expected assignment statement|expected conditional operator|expect result value to be at false expression|" + "expect binary operator in conditional expression|expect '<', '>' or '==' as order operator|expect comparison in a form of 'x == e', 'e == x', 'x ordop expr', or 'expr ordop x'|" + "expect lvalue for result value|expect scalar value|expect integer value|unexpected 'else' statement|expect '==' operator|expect an assignment statement 'v = x'|" + "expect a 'if' statement|expect no more than two statements|expect a compound statement|expect 'else' statement|expect a form 'r = x == e; if (r) ...'}0">; +def err_omp_atomic_fail_wrong_or_no_clauses : Error<"expected a memory order clause">; +def err_omp_atomic_fail_no_compare : Error<"expected 'compare' clause with the 'fail' modifier">; def err_omp_atomic_several_clauses : Error< - "directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause">; + "directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update', 'capture', or 'compare' clause">; def err_omp_several_mem_order_clauses : Error< "directive '#pragma omp %0' cannot contain more than one %select{'seq_cst', 'relaxed', |}1'acq_rel', 'acquire' or 'release' clause">; def err_omp_atomic_incompatible_mem_order_clause : Error< @@ -10454,6 +11057,8 @@ def note_omp_nested_statement_here : Note< "%select{statement|directive}0 outside teams construct here">; def err_omp_single_copyprivate_with_nowait : Error< "the 'copyprivate' clause must not be used with the 'nowait' clause">; +def err_omp_nowait_clause_without_depend: Error< + "directive '#pragma omp taskwait' cannot use 'nowait' clause without 'depend' clause">; def note_omp_nowait_clause_here : Note< "'nowait' clause is here">; def err_omp_single_decl_in_declare_simd_variant : Error< @@ -10506,6 +11111,8 @@ def err_omp_wrong_linear_modifier : Error< "expected %select{'val' modifier|one of 'ref', val' or 'uval' modifiers}0">; def err_omp_wrong_linear_modifier_non_reference : Error< "variable of non-reference type %0 can be used only with 'val' modifier, but used with '%1'">; +def err_omp_step_simple_modifier_exclusive : Error< + "step simple modifier is exclusive and can't be use with 'val', 'uval' or 'ref' modifier">; def err_omp_wrong_simdlen_safelen_values : Error< "the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter">; def err_omp_wrong_if_directive_name_modifier : Error< @@ -10519,7 +11126,7 @@ def note_omp_previous_named_if_clause : Note< def err_omp_ordered_directive_with_param : Error< "'ordered' directive %select{without any clauses|with 'threads' clause}0 cannot be closely nested inside ordered region with specified parameter">; def err_omp_ordered_directive_without_param : Error< - "'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter">; + "'ordered' directive with '%0' clause cannot be closely nested inside ordered region without specified parameter">; def note_omp_ordered_param : Note< "'ordered' clause%select{| with specified parameter}0">; def err_omp_expected_base_var_name : Error< @@ -10528,6 +11135,8 @@ def err_omp_map_shared_storage : Error< "variable already marked as mapped in current construct">; def err_omp_invalid_map_type_for_directive : Error< "%select{map type '%1' is not allowed|map type must be specified}0 for '#pragma omp %2'">; +def err_omp_invalid_map_type_modifier_for_directive : Error< + "map type modifier '%0' is not allowed for '#pragma omp %1'">; def err_omp_no_clause_for_directive : Error< "expected at least one %0 clause for '#pragma omp %1'">; def err_omp_threadprivate_in_clause : Error< @@ -10549,21 +11158,25 @@ def note_omp_critical_hint_here : Note< def note_omp_critical_no_hint : Note< "%select{|previous }0directive with no 'hint' clause specified">; def err_omp_depend_clause_thread_simd : Error< - "'depend' clauses cannot be mixed with '%0' clause">; + "'%0' clauses cannot be mixed with '%1' clause">; def err_omp_depend_sink_expected_loop_iteration : Error< "expected%select{| %1}0 loop iteration variable">; def err_omp_depend_sink_unexpected_expr : Error< "unexpected expression: number of expressions is larger than the number of associated loops">; def err_omp_depend_sink_expected_plus_minus : Error< "expected '+' or '-' operation">; -def err_omp_depend_sink_source_not_allowed : Error< - "'depend(%select{source|sink:vec}0)' clause%select{|s}0 cannot be mixed with 'depend(%select{sink:vec|source}0)' clause%select{s|}0">; +def err_omp_taskwait_depend_mutexinoutset_not_allowed : Error< + "'mutexinoutset' modifier not allowed in 'depend' clause on 'taskwait' directive">; +def err_omp_sink_and_source_not_allowed : Error< + "'%0(%select{source|sink:vec}1)' clause%select{|s}1 cannot be mixed with '%0(%select{sink:vec|source}1)' clause%select{s|}1">; def err_omp_depend_zero_length_array_section_not_allowed : Error< "zero-length array section is not allowed in 'depend' clause">; def err_omp_depend_sink_source_with_modifier : Error< "depend modifier cannot be used with 'sink' or 'source' depend type">; def err_omp_depend_modifier_not_iterator : Error< "expected iterator specification as depend modifier">; +def err_omp_map_modifier_not_iterator : Error< + "expected iterator specification as map modifier">; def err_omp_linear_ordered : Error< "'linear' clause cannot be specified along with 'ordered' clause with a parameter">; def err_omp_unexpected_schedule_modifier : Error< @@ -10584,6 +11197,8 @@ def err_omp_expected_int_param : Error< "expected a reference to an integer-typed parameter">; def err_omp_at_least_one_motion_clause_required : Error< "expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'">; +def err_omp_cannot_update_with_internal_linkage : Error< + "the host cannot update a declare target variable that is not externally visible.">; def err_omp_usedeviceptr_not_a_pointer : Error< "expected pointer or reference to pointer in 'use_device_ptr' clause">; def err_omp_argument_type_isdeviceptr : Error < @@ -10614,6 +11229,8 @@ def err_omp_directive_before_requires : Error < "'%0' region encountered before requires directive with '%1' clause">; def note_omp_requires_encountered_directive : Note < "'%0' previously encountered here">; +def err_omp_device_ancestor_without_requires_reverse_offload : Error < + "Device clause with ancestor device-modifier used without specifying 'requires reverse_offload'">; def err_omp_invalid_scope : Error < "'#pragma omp %0' directive must appear only in file scope">; def note_omp_invalid_length_on_this_ptr_mapping : Note < @@ -10677,9 +11294,9 @@ def err_omp_invariant_or_linear_dependency : Error< "expected loop invariant expression or '<invariant1> * %0 + <invariant2>' kind of expression">; def err_omp_wrong_dependency_iterator_type : Error< "expected an integer or a pointer type of the outer loop counter '%0' for non-rectangular nests">; -def err_device_unsupported_type - : Error<"%0 requires %select{|%2 bit size}1 %3 type support, but device " - "'%4' does not support it">; +def err_target_unsupported_type + : Error<"%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support," + " but target '%5' does not support it">; def err_omp_lambda_capture_in_declare_target_not_to : Error< "variable captured in declare target region must appear in a to clause">; def err_omp_device_type_mismatch : Error< @@ -10714,9 +11331,16 @@ def err_omp_declare_variant_diff : Error< "function with '#pragma omp declare variant' has a different %select{calling convention" "|return type|constexpr specification|inline specification|storage class|" "linkage}0">; +def err_omp_declare_variant_prototype_required : Error< + "function with '#pragma omp declare variant' must have a prototype when " + "'append_args' is used">; +def err_omp_interop_type_not_found : Error< + "'omp_interop_t' must be defined when 'append_args' clause is used; include <omp.h>">; def err_omp_declare_variant_incompat_types : Error< - "variant in '#pragma omp declare variant' with type %0 is incompatible with type %1" - >; + "variant in '#pragma omp declare variant' with type %0 is incompatible with" + " type %1%select{| with appended arguments}2">; +def err_omp_declare_variant_same_base_function : Error< + "variant in '#pragma omp declare variant' is the same as the base function">; def warn_omp_declare_variant_marked_as_declare_variant : Warning< "variant function in '#pragma omp declare variant' is itself marked as '#pragma omp declare variant'" >, InGroup<SourceUsesOpenMP>; @@ -10734,11 +11358,6 @@ def err_omp_non_lvalue_in_map_or_motion_clauses: Error< "expected addressable lvalue in '%0' clause">; def err_omp_var_expected : Error< "expected variable of the '%0' type%select{|, not %2}1">; -def warn_unknown_declare_variant_isa_trait - : Warning<"isa trait '%0' is not known to the current target; verify the " - "spelling or consider restricting the context selector with the " - "'arch' selector further">, - InGroup<SourceUsesOpenMP>; def err_omp_non_pointer_type_array_shaping_base : Error< "expected expression with a pointer to a complete type as a base of an array " "shaping operation">; @@ -10762,6 +11381,9 @@ def note_omp_protected_structured_block : Note<"jump bypasses OpenMP structured block">; def note_omp_exits_structured_block : Note<"jump exits scope of OpenMP structured block">; +def err_omp_lastprivate_loop_var_non_loop_iteration : Error< + "only loop iteration variables are allowed in 'lastprivate' clause in " + "'omp %0' directives">; def err_omp_interop_variable_expected : Error< "expected%select{| non-const}0 variable of type 'omp_interop_t'">; def err_omp_interop_variable_wrong_type : Error< @@ -10779,6 +11401,21 @@ def err_omp_dispatch_statement_call def err_omp_unroll_full_variable_trip_count : Error< "loop to be fully unrolled must have a constant trip count">; def note_omp_directive_here : Note<"'%0' directive found here">; +def err_omp_instantiation_not_supported + : Error<"instantiation of '%0' not supported yet">; +def err_omp_adjust_arg_multiple_clauses : Error< + "'adjust_arg' argument %0 used in multiple clauses">; +def err_omp_clause_requires_dispatch_construct : Error< + "'%0' clause requires 'dispatch' context selector">; +def err_omp_append_args_with_varargs : Error< + "'append_args' is not allowed with varargs functions">; +def err_openmp_vla_in_task_untied : Error< + "variable length arrays are not supported in OpenMP tasking regions with 'untied' clause">; +def warn_omp_unterminated_declare_target : Warning< + "expected '#pragma omp end declare target' at end of file to match '#pragma omp %0'">, + InGroup<SourceUsesOpenMP>; +def err_ompx_bare_no_grid : Error< + "'ompx_bare' clauses requires explicit grid size via 'num_teams' and 'thread_limit' clauses">; } // end of OpenMP category let CategoryName = "Related Result Type Issue" in { @@ -10811,7 +11448,7 @@ def err_invalid_type_for_program_scope_var : Error< let CategoryName = "Modules Issue" in { def err_module_decl_in_module_map_module : Error< "'module' declaration found while building module from module map">; -def err_module_decl_in_header_module : Error< +def err_module_decl_in_header_unit : Error< "'module' declaration found while building header unit">; def err_module_interface_implementation_mismatch : Error< "missing 'export' specifier in module declaration while " @@ -10872,10 +11509,14 @@ def ext_module_import_not_at_top_level_noop : ExtWarn< def note_module_import_not_at_top_level : Note<"%0 begins here">; def err_module_self_import : Error< "import of module '%0' appears within same top-level module '%1'">; +def err_module_self_import_cxx20 : Error< + "import of module '%0' appears within its own %select{interface|implementation}1">; def err_module_import_in_implementation : Error< "@import of module '%0' in implementation of '%1'; use #import">; // C++ Modules +def err_module_import_non_interface_nor_parition : Error< + "import of module '%0' imported non C++20 importable modules">; def err_module_decl_not_at_start : Error< "module declaration must occur at the start of the translation unit">; def note_global_module_introducer_missing : Note< @@ -10884,27 +11525,22 @@ def note_global_module_introducer_missing : Note< def err_export_within_anonymous_namespace : Error< "export declaration appears within anonymous namespace">; def note_anonymous_namespace : Note<"anonymous namespace begins here">; -def ext_export_no_name_block : ExtWarn< - "ISO C++20 does not permit %select{an empty|a static_assert}0 declaration " - "to appear in an export block">, InGroup<ExportUnnamed>; -def ext_export_no_names : ExtWarn< - "ISO C++20 does not permit a declaration that does not introduce any names " - "to be exported">, InGroup<ExportUnnamed>; def note_export : Note<"export block begins here">; -def err_export_no_name : Error< - "%select{empty|static_assert|asm}0 declaration cannot be exported">; -def ext_export_using_directive : ExtWarn< - "ISO C++20 does not permit using directive to be exported">, - InGroup<DiagGroup<"export-using-directive">>; def err_export_within_export : Error< "export declaration appears within another export declaration">; +def err_export_anon_ns_internal : Error< + "anonymous namespaces cannot be exported">; def err_export_internal : Error< "declaration of %0 with internal linkage cannot be exported">; def err_export_using_internal : Error< - "using declaration referring to %0 with internal linkage cannot be exported">; + "using declaration referring to %1 with %select{internal|module|unknown}0 " + "linkage cannot be exported">; def err_export_not_in_module_interface : Error< - "export declaration can only be used within a module interface unit" - "%select{ after the module declaration|}0">; + "export declaration can only be used within a module purview">; +def err_export_inline_not_defined : Error< + "inline function not defined%select{| before the private module fragment}0">; +def err_export_partition_impl : Error< + "module partition implementations cannot be exported">; def err_export_in_private_module_fragment : Error< "export declaration cannot be used in a private module fragment">; def note_private_module_fragment : Note< @@ -10917,6 +11553,13 @@ def err_private_module_fragment_not_module_interface : Error< "private module fragment in module implementation unit">; def note_not_module_interface_add_export : Note< "add 'export' here if this is intended to be a module interface unit">; +def err_invalid_module_name : Error<"%0 is an invalid name for a module">; +def err_extern_def_in_header_unit : Error< + "non-inline external definitions are not permitted in C++ header units">; + +def warn_experimental_header_unit : Warning< + "the implementation of header units is in an experimental phase">, + InGroup<DiagGroup<"experimental-header-units">>; def ext_equivalent_internal_linkage_decl_in_modules : ExtWarn< "ambiguous use of internal linkage declaration %0 defined in multiple modules">, @@ -10949,7 +11592,7 @@ def err_coroutine_invalid_func_context : Error< "|a function with a deduced return type|a varargs function" "|a consteval function}0">; def err_implied_coroutine_type_not_found : Error< - "%0 type was not found; include <experimental/coroutine> before defining " + "%0 type was not found; include <coroutine> before defining " "a coroutine">; def err_implicit_coroutine_std_nothrow_type_not_found : Error< "std::nothrow was not found; include <new> before defining a coroutine which " @@ -10957,11 +11600,11 @@ def err_implicit_coroutine_std_nothrow_type_not_found : Error< def err_malformed_std_nothrow : Error< "std::nothrow must be a valid variable declaration">; def err_malformed_std_coroutine_handle : Error< - "std::experimental::coroutine_handle must be a class template">; + "std::coroutine_handle isn't a class template">; def err_coroutine_handle_missing_member : Error< - "std::experimental::coroutine_handle missing a member named '%0'">; + "std::coroutine_handle must have a member named '%0'">; def err_malformed_std_coroutine_traits : Error< - "'std::experimental::coroutine_traits' must be a class template">; + "std::coroutine_traits isn't a class template">; def err_implied_std_coroutine_traits_promise_type_not_found : Error< "this function cannot be a coroutine: %q0 has no member named 'promise_type'">; def err_implied_std_coroutine_traits_promise_type_not_class : Error< @@ -10973,8 +11616,6 @@ def err_coroutine_type_missing_specialization : Error< "specialization %0">; def err_coroutine_promise_incompatible_return_functions : Error< "the coroutine promise type %0 declares both 'return_value' and 'return_void'">; -def err_coroutine_promise_requires_return_function : Error< - "the coroutine promise type %0 must declare either 'return_value' or 'return_void'">; def note_coroutine_promise_implicit_await_transform_required_here : Note< "call to 'await_transform' implicitly required by 'co_await' here">; def note_coroutine_promise_suspend_implicitly_required : Note< @@ -11009,11 +11650,39 @@ def err_coroutine_promise_final_suspend_requires_nothrow : Error< def note_coroutine_function_declare_noexcept : Note< "must be declared with 'noexcept'" >; +def warn_always_inline_coroutine : Warning< + "this coroutine may be split into pieces; not every piece is guaranteed to be inlined" + >, + InGroup<AlwaysInlineCoroutine>; +def err_coroutine_unusable_new : Error< + "'operator new' provided by %0 is not usable with the function signature of %1" +>; +def err_coroutine_unfound_nothrow_new : Error < + "unable to find %select{'::operator new(size_t, nothrow_t)'|" + "'::operator new(size_t, align_val_t, nothrow_t)'}1 for %0" +>; +def warn_non_aligned_allocation_function : Warning < + "under -fcoro-aligned-allocation, the non-aligned allocation function " + "for the promise type %0 has higher precedence than the global aligned " + "allocation function">, + InGroup<CoroNonAlignedAllocationFunction>; +def err_conflicting_aligned_options : Error < + "conflicting option '-fcoro-aligned-allocation' and '-fno-aligned-allocation'" +>; +def err_coro_invalid_addr_of_label : Error< + "the GNU address of label extension is not allowed in coroutines." +>; +def err_coroutine_return_type : Error< + "function returns a type %0 marked with [[clang::coro_return_type]] but is neither a coroutine nor a coroutine wrapper; " + "non-coroutines should be marked with [[clang::coro_wrapper]] to allow returning coroutine return type" +>; } // end of coroutines issue category let CategoryName = "Documentation Issue" in { def warn_not_a_doxygen_trailing_member_comment : Warning< "not a Doxygen trailing comment">, InGroup<Documentation>, DefaultIgnore; +def warn_splice_in_doxygen_comment : Warning< + "line splicing in Doxygen comments are not supported">, InGroup<Documentation>, DefaultIgnore; } // end of documentation issue category let CategoryName = "Nullability Issue" in { @@ -11145,6 +11814,10 @@ def err_objc_type_args_wrong_arity : Error< "too %select{many|few}0 type arguments for class %1 (have %2, expected %3)">; } +def err_type_available_only_in_default_eval_method : Error< + "cannot use type '%0' within '#pragma clang fp eval_method'; type is set " + "according to the default eval method for the translation unit">; + def err_objc_type_arg_not_id_compatible : Error< "type argument %0 is neither an Objective-C object nor a block type">; @@ -11170,7 +11843,7 @@ def note_shadow_field : Note<"declared here">; def err_multiversion_required_in_redecl : Error< "function declaration is missing %select{'target'|'cpu_specific' or " - "'cpu_dispatch'}0 attribute in a multiversioned function">; + "'cpu_dispatch'|'target_version'}0 attribute in a multiversioned function">; def note_multiversioning_caused_here : Note< "function multiversioning caused by this declaration">; def err_multiversion_after_used : Error< @@ -11183,21 +11856,23 @@ def err_multiversion_duplicate : Error< "multiversioned function redeclarations require identical target attributes">; def err_multiversion_noproto : Error< "multiversioned function must have a prototype">; -def err_multiversion_disallowed_other_attr : Error< - "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioning cannot be combined" - " with attribute %1">; -def err_multiversion_mismatched_attrs - : Error<"attributes on multiversioned functions must all match, attribute " - "%0 %select{is missing|has different arguments}1">; +def err_multiversion_disallowed_other_attr + : Error<"attribute " + "'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0' " + "multiversioning cannot be combined" + " with attribute %1">; def err_multiversion_diff : Error< "multiversioned function declaration has a different %select{calling convention" - "|return type|constexpr specification|inline specification|storage class|" - "linkage}0">; -def err_multiversion_doesnt_support : Error< - "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioned functions do not " - "yet support %select{function templates|virtual functions|" - "deduced return types|constructors|destructors|deleted functions|" - "defaulted functions|constexpr functions|consteval function}1">; + "|return type|constexpr specification|inline specification|linkage|" + "language linkage}0">; +def err_multiversion_doesnt_support + : Error<"attribute " + "'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0' " + "multiversioned functions do not " + "yet support %select{function templates|virtual functions|" + "deduced return types|constructors|destructors|deleted functions|" + "defaulted functions|constexpr functions|consteval " + "function|lambdas}1">; def err_multiversion_not_allowed_on_main : Error< "'main' cannot be a multiversioned function">; def err_multiversion_not_supported : Error< @@ -11214,6 +11889,22 @@ def warn_multiversion_duplicate_entries : Warning< def warn_dispatch_body_ignored : Warning< "body of cpu_dispatch function will be ignored">, InGroup<FunctionMultiVersioning>; +def err_target_clone_must_have_default + : Error<"'target_clones' multiversioning requires a default target">; +def err_target_clone_doesnt_match + : Error<"'target_clones' attribute does not match previous declaration">; +def warn_target_clone_mixed_values + : ExtWarn< + "mixing 'target_clones' specifier mechanisms is permitted for GCC " + "compatibility; use a comma separated sequence of string literals, " + "or a string literal containing a comma-separated list of versions">, + InGroup<TargetClonesMixedSpecifiers>; +def warn_target_clone_duplicate_options + : Warning<"version list contains duplicate entries">, + InGroup<FunctionMultiVersioning>; +def warn_target_clone_no_impact_options + : Warning<"version list contains entries that don't impact code generation">, + InGroup<FunctionMultiVersioning>; // three-way comparison operator diagnostics def err_implied_comparison_category_type_not_found : Error< @@ -11257,6 +11948,14 @@ def err_builtin_launder_invalid_arg : Error< "%select{non-pointer|function pointer|void pointer}0 argument to " "'__builtin_launder' is not allowed">; +def err_builtin_invalid_arg_type: Error < + "%ordinal0 argument must be a " + "%select{vector, integer or floating point type|matrix|" + "pointer to a valid matrix element type|" + "signed integer or floating point type|vector type|" + "floating point type|" + "vector of integers}1 (was %2)">; + def err_builtin_matrix_disabled: Error< "matrix types extension is disabled. Pass -fenable-matrix to enable it">; def err_matrix_index_not_integer: Error< @@ -11269,11 +11968,8 @@ def err_matrix_separate_incomplete_index: Error< "matrix row and column subscripts cannot be separated by any expression">; def err_matrix_subscript_comma: Error< "comma expressions are not allowed as indices in matrix subscript expressions">; -def err_builtin_matrix_arg: Error<"1st argument must be a matrix">; def err_builtin_matrix_scalar_unsigned_arg: Error< "%0 argument must be a constant unsigned integer expression">; -def err_builtin_matrix_pointer_arg: Error< - "%ordinal0 argument must be a pointer to a valid matrix element type">; def err_builtin_matrix_pointer_arg_mismatch: Error< "the pointee of the 2nd argument must match the element type of the 1st argument (%0 != %1)">; def err_builtin_matrix_store_to_const: Error< @@ -11324,10 +12020,17 @@ def warn_sycl_kernel_num_of_function_params : Warning< def warn_sycl_kernel_return_type : Warning< "function template with 'sycl_kernel' attribute must have a 'void' return type">, InGroup<IgnoredAttributes>; +def err_sycl_special_type_num_init_method : Error< + "types with 'sycl_special_class' attribute must have one and only one '__init' " + "method defined">; + +def warn_cuda_maxclusterrank_sm_90 : Warning< + "maxclusterrank requires sm_90 or higher, CUDA arch provided: %0, ignoring " + "%1 attribute">, InGroup<IgnoredAttributes>; -def err_ext_int_bad_size : Error<"%select{signed|unsigned}0 _ExtInt must " +def err_bit_int_bad_size : Error<"%select{signed|unsigned}0 _BitInt must " "have a bit size of at least %select{2|1}0">; -def err_ext_int_max_size : Error<"%select{signed|unsigned}0 _ExtInt of bit " +def err_bit_int_max_size : Error<"%select{signed|unsigned}0 _BitInt of bit " "sizes greater than %1 not supported">; // errors of expect.with.probability @@ -11347,7 +12050,118 @@ def warn_tcb_enforcement_violation : Warning< // RISC-V builtin required extension warning def err_riscv_builtin_requires_extension : Error< - "builtin requires '%0' extension support to be enabled">; + "builtin requires%select{| at least one of the following extensions}0: %1">; def err_riscv_builtin_invalid_lmul : Error< "LMUL argument must be in the range [0,3] or [5,7]">; +def err_riscv_type_requires_extension : Error< + "RISC-V type %0 requires the '%1' extension" +>; + +def err_std_source_location_impl_not_found : Error< + "'std::source_location::__impl' was not found; it must be defined before '__builtin_source_location' is called">; +def err_std_source_location_impl_malformed : Error< + "'std::source_location::__impl' must be standard-layout and have only two 'const char *' fields '_M_file_name' and '_M_function_name', and two integral fields '_M_line' and '_M_column'">; + +// HLSL Diagnostics +def err_hlsl_attr_unsupported_in_stage : Error<"attribute %0 is unsupported in '%1' shaders, requires %select{|one of the following: }2%3">; +def err_hlsl_attr_invalid_type : Error< + "attribute %0 only applies to a field or parameter of type '%1'">; +def err_hlsl_attr_invalid_ast_node : Error< + "attribute %0 only applies to %1">; +def err_hlsl_entry_shader_attr_mismatch : Error< + "%0 attribute on entry function does not match the target profile">; +def err_hlsl_numthreads_argument_oor : Error<"argument '%select{X|Y|Z}0' to numthreads attribute cannot exceed %1">; +def err_hlsl_numthreads_invalid : Error<"total number of threads cannot exceed %0">; +def err_hlsl_missing_numthreads : Error<"missing numthreads attribute for %0 shader entry">; +def err_hlsl_attribute_param_mismatch : Error<"%0 attribute parameters do not match the previous declaration">; +def err_hlsl_duplicate_parameter_modifier : Error<"duplicate parameter modifier %0">; +def err_hlsl_missing_semantic_annotation : Error< + "semantic annotations must be present for all parameters of an entry " + "function or patch constant function">; +def err_hlsl_init_priority_unsupported : Error< + "initializer priorities are not supported in HLSL">; + +def err_hlsl_unsupported_register_type : Error<"invalid resource class specifier '%0' used; expected 'b', 's', 't', or 'u'">; +def err_hlsl_unsupported_register_number : Error<"register number should be an integer">; +def err_hlsl_expected_space : Error<"invalid space specifier '%0' used; expected 'space' followed by an integer, like space1">; +def err_hlsl_pointers_unsupported : Error< + "%select{pointers|references}0 are unsupported in HLSL">; + +def err_hlsl_operator_unsupported : Error< + "the '%select{&|*|->}0' operator is unsupported in HLSL">; + +def err_hlsl_param_qualifier_mismatch : + Error<"conflicting parameter qualifier %0 on parameter %1">; + +// Layout randomization diagnostics. +def err_non_designated_init_used : Error< + "a randomized struct can only be initialized with a designated initializer">; +def err_cast_from_randomized_struct : Error< + "casting from randomized structure pointer type %0 to %1">; + +// Unsafe buffer usage diagnostics. +def warn_unsafe_buffer_variable : Warning< + "%0 is an %select{unsafe pointer used for buffer access|unsafe buffer that " + "does not perform bounds checks}1">, + InGroup<UnsafeBufferUsage>, DefaultIgnore; +def warn_unsafe_buffer_operation : Warning< + "%select{unsafe pointer operation|unsafe pointer arithmetic|" + "unsafe buffer access|function introduces unsafe buffer manipulation|unsafe invocation of span::data}0">, + InGroup<UnsafeBufferUsage>, DefaultIgnore; +def note_unsafe_buffer_operation : Note< + "used%select{| in pointer arithmetic| in buffer access}0 here">; +def note_unsafe_buffer_variable_fixit_group : Note< + "change type of %0 to '%select{std::span|std::array|std::span::iterator}1' to preserve bounds information%select{|, and change %2 to '%select{std::span|std::array|std::span::iterator}1' to propagate bounds information between them}3">; +def note_unsafe_buffer_variable_fixit_together : Note< + "change type of %0 to '%select{std::span|std::array|std::span::iterator}1' to preserve bounds information" + "%select{|, and change %2 to safe types to make function %4 bounds-safe}3">; +def note_safe_buffer_usage_suggestions_disabled : Note< + "pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions">; +#ifndef NDEBUG +// Not a user-facing diagnostic. Useful for debugging false negatives in +// -fsafe-buffer-usage-suggestions (i.e. lack of -Wunsafe-buffer-usage fixits). +def note_safe_buffer_debug_mode : Note<"safe buffers debug: %0">; +#endif + +def err_builtin_pass_in_regs_non_class : Error< + "argument %0 is not an unqualified class type">; + + +// WebAssembly reference type and table diagnostics. +def err_wasm_reference_pr : Error< + "%select{pointer|reference}0 to WebAssembly reference type is not allowed">; +def err_wasm_ca_reference : Error< + "cannot %select{capture|take address of}0 WebAssembly reference">; +def err_wasm_funcref_not_wasm : Error< + "invalid use of '__funcref' keyword outside the WebAssembly triple">; +def err_wasm_table_pr : Error< + "cannot form a %select{pointer|reference}0 to a WebAssembly table">; +def err_typecheck_wasm_table_must_have_zero_length : Error< + "only zero-length WebAssembly tables are currently supported">; +def err_wasm_table_in_function : Error< + "WebAssembly table cannot be declared within a function">; +def err_wasm_table_as_function_parameter : Error< + "cannot use WebAssembly table as a function parameter">; +def err_wasm_table_invalid_uett_operand : Error< + "invalid application of '%0' to WebAssembly table">; +def err_wasm_cast_table : Error< + "cannot cast %select{to|from}0 a WebAssembly table">; +def err_wasm_table_conditional_expression : Error< + "cannot use a WebAssembly table within a branch of a conditional expression">; +def err_wasm_table_art : Error< + "cannot %select{assign|return|throw|subscript}0 a WebAssembly table">; +def err_wasm_reftype_tc : Error< + "cannot %select{throw|catch}0 a WebAssembly reference type">; +def err_wasm_reftype_exception_spec : Error< + "WebAssembly reference type not allowed in exception specification">; +def err_wasm_table_must_be_static : Error< + "WebAssembly table must be static">; +def err_wasm_reftype_multidimensional_array : Error< + "multi-dimensional arrays of WebAssembly references are not allowed">; +def err_wasm_builtin_arg_must_be_table_type : Error < + "%ordinal0 argument must be a WebAssembly table">; +def err_wasm_builtin_arg_must_match_table_element_type : Error < + "%ordinal0 argument must match the element type of the WebAssembly table in the %ordinal1 argument">; +def err_wasm_builtin_arg_must_be_integer_type : Error < + "%ordinal0 argument must be an integer">; } // end of sema component. |