Warning messages (Object Pascal)
Go Up to Object Pascal Compiler Directives (List) Index
Type |
Switch |
Syntax |
{$WARN identifier ON | OFF | ERROR | DEFAULT} |
Default |
All warnings are enabled |
Scope |
Local |
Remarks
The $WARN directive gives you fine-grained control over individual warning messages.
Syntax | Effect |
---|---|
{$WARN identifier ON} | Allows the compiler to display the warning specified by the identifier |
{$WARN identifier OFF} | The specified warning is not displayed |
{$WARN identifier ERROR} | The specified warning is treated as error |
{$WARN identifier DEFAULT} | Uses the default settings from the Project Options dialog box. |
These warnings relate to symbols or units that use the hint directives, platform, deprecated, and library.
The identifier in the $WARN directive can have any of the following values:
- BOUNDS_ERROR: Turns on or off warnings produced if a conversion is made that is no longer legal
(See W1012 Constant expression violates subrange bounds.)
- GARBAGE: Turns on or off warnings produced when the presence of non-whitespace text is detected past the end of the final 'end.' in the program, unit, library or package
(See W1011 Text after final 'END.' - ignored by compiler (Object Pascal).)
- HIDDEN_VIRTUAL: Turns on or off warnings produced when a descendant declares a method of the same name as a method in an ancestor, and the ancestor method is virtual, but the descendant's method is not an override.
(See W1010 Method '%s' hides virtual method of base type '%s' (Object Pascal).)
- HIDING_MEMBER: Turns on or off warnings produced when a descendant declares a new property of the same name as a property in an ancestor.
(See W1009 Redeclaration of '%s' hides a member in the base class (Object Pascal).)
- HRESULT_COMPAT: Turns on or off warnings about using the type 'Integer' where 'HRESULT' is correct.
(See W1008 Integer and HRESULT interchanged.)
- STRING_CONST_TRUNCED: Turns on or off all warnings about instances in which the compiler assigns a string literal or a constant value to a short string location that cannot hold the entire string.
(See W1014 String constant truncated to fit STRING%ld (Object Pascal).)
- SYMBOL_DEPRECATED: Turns on or off all warnings about the deprecated directive on symbols in the current unit.
(See W1000 Symbol '%s' is deprecated (Object Pascal).) - SYMBOL_EXPERIMENTAL: Turns on or off all warnings about the experimental directive on symbols in the current unit.
(See W1003 Symbol '%s' is experimental (Object Pascal).) - SYMBOL_PLATFORM: Turns on or off all warnings about the platform directive on symbols in the current unit. (
See W1002 Symbol '%s' is specific to a platform (Object Pascal).)
- SYMBOL_LIBRARY: Turns on or off all warnings about the library directive on symbols in the current unit.
(See W1001 Symbol '%s' is specific to a library (Object Pascal).)
- UNIT_DEPRECATED: Turns on or off all warnings about the deprecated directive applied to a unit declaration.
(See W1006 Unit '%s' is deprecated (Object Pascal).)
- UNIT_EXPERIMENTAL: Turns on or off all warnings about the experimental directive applied to a unit declaration.
(See W1007 Unit '%s' is experimental (Object Pascal).)
- UNIT_LIBRARY: Turns on or off all warnings about the library directive in units where the library directive is specified.
(See W1004 Unit '%s' is specific to a library (Object Pascal).)
- UNIT_PLATFORM: Turns on or off all warnings about the platform directive in units where the platform directive is specified.
(See W1005 Unit '%s' is specific to a platform (Object Pascal).)
- ZERO_NIL_COMPAT: Turns on or off all warnings about instances in which the compiler converts 0 to a pointer with the value nil.
(See W1013 Constant 0 converted to NIL (Object Pascal).)
The only warnings that can be turned on/off using $WARN are the ones listed above.
The warnings set by the inline $WARN directive are carried for the compilation unit in which the directive appears, after which it reverts to the previous state. The warnings set by a $WARN directive take effect from that point on in the file.
The $WARNINGS directive also controls the generation of compiler warnings.
Examples
The following $WARN directive results in warnings about all references to experimental symbols in the current module:
{$WARNINGS ON}
{$WARN SYMBOL_EXPERIMENTAL ON}
procedure Foo; experimental;
begin
end;
begin
Foo // Warning: W1003 Symbol 'Foo' is experimental
end.
If that $WARN directive were changed to:
{$WARN SYMBOL_EXPERIMENTAL ERROR}
then the compiler message would change to:
Error: E1003 Symbol 'Foo' is experimental
and this module would not be compiled.
Another example:
{$WARN WIDECHAR_REDUCED OFF}
if c in ['a', 'b'] then
// ...
{$WARN WIDECHAR_REDUCED DEFAULT}
Possible warnings:
• ID_DEPRECATED, //"x1000 Symbol '%s' is deprecated%s"
• ID_LIBRARY, //"x1001 Symbol '%s' is specific to a library"
• ID_PLATFORM, //"x1002 Symbol '%s' is specific to a platform"
• ID_EXPERIMENTAL, //"x1003 Symbol '%s' is experimental"
• UNIT_LIBRARY, //"x1004 Unit '%s' is specific to a library"
• UNIT_PLATFORM, //"x1005 Unit '%s' is specific to a platform"
• UNIT_DEPRECATED, //"x1006 Unit '%s' is deprecated"
• UNIT_EXPERIMENTAL, //"x1007 Unit '%s' is experimental"
• HRESULT_COMPAT, //"x1008 Integer and HRESULT interchanged"
• HIDING_MEMBER, //"x1009 Redeclaration of '%s' hides a member in the base class"
• HIDDEN_VIRTUAL, //"x1010 Method '%s' hides virtual method of base type '%s'"
• GARBAGE, //"x1011 Text after final 'END.' - ignored by compiler"
• BOUNDS_ERROR, //"x1012 Constant expression violates subrange bounds"
• ZERO_NIL_COMPAT, //"x1013 Constant 0 converted to NIL"
• STRING_CONST_TRUNCED, //"x1014 String constant truncated to fit STRING[%ld]"
• FOR_LOOP_VAR_VARPAR, //"x1015 FOR-Loop variable '%s' cannot be passed as var parameter"
• TYPED_CONST_VARPAR, //"x1016 Typed constant '%s' passed as var parameter"
• ASG_TO_TYPED_CONST, //"x1017 Assignment to typed constant '%s'"
• CASE_LABEL_RANGE, //"x1018 Case label outside of range of case expression"
• FOR_VARIABLE, //"x1019 For loop control variable must be simple local variable"
• CONSTRUCTING_ABSTRACT, //"x1020 Constructing instance of '%s' containing abstract method '%s.%s'"
• COMPARISON_FALSE, //"x1021 Comparison always evaluates to False"
• COMPARISON_TRUE, //"x1022 Comparison always evaluates to True"
• COMPARING_SIGNED_UNSIGNED, //"x1023 Comparing signed and unsigned types - widened both operands"
• COMBINING_SIGNED_UNSIGNED, //"x1024 Combining signed and unsigned types - widened both operands"
• UNSUPPORTED_CONSTRUCT, //"x1025 Unsupported language feature: '%s'"
• FILE_OPEN, //"x1026 File not found: '%s'"
• FILE_OPEN_UNITSRC, //"F1027 Unit not found: '%s' or binary equivalents (%s)"
• BAD_GLOBAL_SYMBOL, //"x1028 Bad global symbol definition: '%s' in object file '%s'"
• DUPLICATE_CTOR_DTOR, //"x1029 Duplicate %s '%s' with identical parameters will be inacessible"
• INVALID_DIRECTIVE, //"x1030 Invalid compiler directive: '%s'"
• PACKAGE_NO_LINK, //"x1031 Package '%s' will not be written to disk because -J option is enabled"
• PACKAGED_THREADVAR, //"x1032 Exported package threadvar '%s.%s' cannot be used outside of this package"
• IMPLICIT_IMPORT, //"x1033 Unit '%s' implicitly imported into package '%s'"
• HPPEMIT_IGNORED, //"x1034 $HPPEMIT '%s' ignored"
• NO_RETVAL, //"x1035 Return value of function '%s' might be undefined"
• USE_BEFORE_DEF, //"x1036 Variable '%s' might not have been initialized"
• FOR_LOOP_VAR_UNDEF, //"x1037 FOR-Loop variable '%s' may be undefined after loop"
• UNIT_NAME_MISMATCH, //"E1038 Unit identifier '%s' does not match file name"
• NO_CFG_FILE_FOUND, //"x1039 No configuration files found"
• IMPLICIT_VARIANTS, //"x1040 Implicit use of Variants unit"
• UNICODE_TO_LOCALE, //"x1041 Error converting Unicode char to locale charset. String truncated. Is your LANG environment variable set correctly?"
• LOCALE_TO_UNICODE, //"x1042 Error converting locale string '%s' to Unicode. String truncated. Is your LANG environment variable set correctly?"
• IMAGEBASE_MULTIPLE, //"x1043 Imagebase $%X is not a multiple of 64k. Rounding down to $%X"
• SUSPICIOUS_TYPECAST, //"x1044 Suspicious typecast of %s to %s"
• PRIVATE_PROPACCESSOR, //"x1045 Property declaration references ancestor private '%s.%s'"
• UNSAFE_TYPE, //"x1046 Unsafe type '%s%s%s'"
• UNSAFE_CODE, //"x1047 Unsafe code '%s'"
• UNSAFE_CAST, //"x1048 Unsafe typecast of '%s' to '%s'"
• OPTION_TRUNCATED, //"x1049 value '%s' for option %s was truncated"
• WIDECHAR_REDUCED, //"x1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit."
• DUPLICATES_IGNORED, //"x1051 Duplicate symbol names in namespace. Using '%s.%s' found in %s. Ignoring duplicate in %s"
• UNIT_INIT_SEQ, //"x1052 Can't find System.Runtime.CompilerServices.RunClassConstructor. Unit initialization order will not follow uses clause order"
• LOCAL_PINVOKE, //"x1053 Local PInvoke code has not been made because external routine '%s' in package '%s' is defined using package local types in its custom attributes" // (.Net only)
• MESSAGE_DIRECTIVE, //"x1054 %s"
• TYPEINFO_IMPLICITLY_ADDED, //"x1055 PUBLISHED caused RTTI ($M+) to be added to type '%s'"
• RLINK_WARNING, //"x1056 %s%s%s"
• IMPLICIT_STRING_CAST, //"x1057 Implicit string cast from '%s' to '%s'"
• IMPLICIT_STRING_CAST_LOSS, //"x1058 Implicit string cast with potential data loss from '%s' to '%s'"
• EXPLICIT_STRING_CAST, //"x1059 Explicit string cast from '%s' to '%s'"
• EXPLICIT_STRING_CAST_LOSS, //"x1060 Explicit string cast with potential data loss from '%s' to '%s'"
• CVT_WCHAR_TO_ACHAR, //"x1061 Narrowing given WideChar constant (#$%04X) to AnsiChar lost information"
• CVT_NARROWING_STRING_LOST, //"x1062 Narrowing given wide string constant lost information"
• CVT_ACHAR_TO_WCHAR, //"x1063 Widening given AnsiChar constant (#$%02X) to WideChar lost information"
• CVT_WIDENING_STRING_LOST, //"x1064 Widening given AnsiString constant lost information"
• NON_PORTABLE_TYPECAST, //"x1065 Typecast of %s to %s is non-portable; code may run differently on 32bit and 64bit platforms"
• LOST_EXT80_PRECISION, //"x1066 Lost Extended floating point precision. Reduced to Double"
• LNKDFM_NOTFOUND, //"x1067 Unable to load DLL %s"
• IMMUTABLE_STRINGS, //"x1068 Modifying strings in place may not be supported in the future"
• MOBILE_DELPHI, //"x1069 %s"
• UNSAFE_VOID_POINTER, //"x1070 Use of untype pointer can disrupt instance reference counts"
• XML_WHITESPACE_NOT_ALLOWED, //"x1201 XML comment on '%s' has badly formed XML -- 'Whitespace is not allowed at this location.'"
• XML_UNKNOWN_ENTITY, //"x1202 XML comment on '%s' has badly formed XML -- 'Reference to undefined entity '%s'.'"
• XML_INVALID_NAME_START, //"x1203 XML comment on '%s' has badly formed XML -- 'A name was started with an invalid character.'"
• XML_INVALID_NAME, //"x1204 XML comment on '%s' has badly formed XML -- 'A name contained an invalid character.'"
• XML_EXPECTED_CHARACTER, //"x1205 XML comment on '%s' has badly formed XML -- 'The character '%c' was expected.'"
• XML_CREF_NO_RESOLVE, //"x1206 XML comment on '%s' has cref attribute '%s' that could not be resolved"
• XML_NO_PARM, //"x1207 XML comment on '%s' has a param tag for '%s', but there is no parameter by that name"
• XML_NO_MATCHING_PARM, //"x1208 Parameter '%s' has no matching param tag in the XML comment for '%s' (but other parameters do)"