diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2009-11-18 14:59:57 +0000 |
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2009-11-18 14:59:57 +0000 |
| commit | b3d5a323a5ca92ea73443499cee2f15db1ff0fb3 (patch) | |
| tree | 60a1694bec5a44d15456acc880cb2f91619f66aa /include/clang/Basic | |
| parent | 8f57cb0305232cb53fff00ef151ca716766f3437 (diff) | |
Notes
Diffstat (limited to 'include/clang/Basic')
| -rw-r--r-- | include/clang/Basic/Diagnostic.h | 15 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticCommonKinds.td | 7 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticFrontendKinds.td | 25 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticGroups.td | 24 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticLexKinds.td | 8 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticParseKinds.td | 10 | ||||
| -rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 97 | ||||
| -rw-r--r-- | include/clang/Basic/LangOptions.h | 7 | ||||
| -rw-r--r-- | include/clang/Basic/Makefile | 4 | ||||
| -rw-r--r-- | include/clang/Basic/TargetInfo.h | 48 | ||||
| -rw-r--r-- | include/clang/Basic/TargetOptions.h | 39 |
11 files changed, 225 insertions, 59 deletions
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index 77a2079b766d..3a70e134b82b 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -32,6 +32,7 @@ namespace clang { class IdentifierInfo; class LangOptions; class PartialDiagnostic; + class Preprocessor; class SourceRange; // Import the diagnostic enums themselves. @@ -105,6 +106,10 @@ public: /// modification is known. CodeModificationHint() : RemoveRange(), InsertionLoc() { } + bool isNull() const { + return !RemoveRange.isValid() && !InsertionLoc.isValid(); + } + /// \brief Create a code modification hint that inserts the given /// code string at a specific location. static CodeModificationHint CreateInsertion(SourceLocation InsertionLoc, @@ -382,6 +387,7 @@ public: /// @c Pos represents the source location associated with the diagnostic, /// which can be an invalid location if no position information is available. inline DiagnosticBuilder Report(FullSourceLoc Pos, unsigned DiagID); + inline DiagnosticBuilder Report(unsigned DiagID); /// \brief Clear out the current diagnostic. void Clear() { CurDiagID = ~0U; } @@ -586,6 +592,9 @@ public: } void AddCodeModificationHint(const CodeModificationHint &Hint) const { + if (Hint.isNull()) + return; + assert(NumCodeModificationHints < Diagnostic::MaxCodeModificationHints && "Too many code modification hints!"); if (DiagObj) @@ -664,6 +673,9 @@ inline DiagnosticBuilder Diagnostic::Report(FullSourceLoc Loc, unsigned DiagID){ CurDiagID = DiagID; return DiagnosticBuilder(this); } +inline DiagnosticBuilder Diagnostic::Report(unsigned DiagID) { + return Report(FullSourceLoc(), DiagID); +} //===----------------------------------------------------------------------===// // DiagnosticInfo @@ -780,7 +792,8 @@ public: /// \arg LO - The language options for the source file being processed. /// \arg PP - The preprocessor object being used for the source; this optional /// and may not be present, for example when processing AST source files. - virtual void BeginSourceFile(const LangOptions &LangOpts) {} + virtual void BeginSourceFile(const LangOptions &LangOpts, + const Preprocessor *PP = 0) {} /// EndSourceFile - Callback to inform the diagnostic client that processing /// of a source file has ended. The diagnostic client should assume that any diff --git a/include/clang/Basic/DiagnosticCommonKinds.td b/include/clang/Basic/DiagnosticCommonKinds.td index bb251ad73bd8..9a342b592ca5 100644 --- a/include/clang/Basic/DiagnosticCommonKinds.td +++ b/include/clang/Basic/DiagnosticCommonKinds.td @@ -52,4 +52,11 @@ def warn_integer_too_large_for_signed : Warning< def note_invalid_subexpr_in_ice : Note< "subexpression not valid in an integer constant expression">; +// Targets + +def err_target_unknown_triple : Error< + "unknown target triple '%0', please use -triple or -arch">; +def err_target_unknown_abi : Error<"unknown target ABI '%0'">; +def err_target_invalid_feature : Error<"invalid target feature '%0'">; + } diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td index ae8b92394443..e9b351ffe995 100644 --- a/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/include/clang/Basic/DiagnosticFrontendKinds.td @@ -9,19 +9,33 @@ let Component = "Frontend" in { -def err_fe_unknown_triple : Error< - "unknown target triple '%0', please use -triple or -arch">; -def err_fe_unknown_target_abi : Error<"unknown target ABI '%0'">; def err_fe_error_opening : Error<"error opening '%0': %1">; def err_fe_error_reading : Error<"error reading '%0'">; def err_fe_error_reading_stdin : Error<"error reading stdin">; def err_fe_error_backend : Error<"error in backend: %0">, DefaultFatal; def err_fe_invalid_ast_file : Error<"invalid AST file: '%0'">, DefaultFatal; def err_fe_invalid_ast_action : Error<"invalid action for AST input">, DefaultFatal; -def err_fe_invalid_code_complete_file +def err_fe_invalid_code_complete_file : Error<"cannot locate code-completion file %0">, DefaultFatal; def err_fe_dependency_file_requires_MT : Error< "-dependency-file requires at least one -MT option">; +def err_fe_incompatible_options : Error< + "'%0' cannot be used with '%1'">, DefaultFatal; +def err_fe_no_fixit_and_codegen : Error< + "FIX-ITs cannot be applied when generating code">; +def err_fe_unable_to_find_fixit_file : Error< + "FIX-IT could not find file '%0'">; +def err_fe_invalid_plugin_name : Error< + "unable to find plugin '%0'">; + +def err_verify_bogus_characters : Error< + "bogus characters before '{{' in expected string">; +def err_verify_missing_start : Error< + "cannot find start ('{{') of expected string">; +def err_verify_missing_end : Error< + "cannot find end ('}}') of expected string">; +def err_verify_inconsistent_diags : Error< + "'%0' diagnostics %select{expected|seen}1 but not %select{seen|expected}1: %2">; def note_fixit_applied : Note<"FIX-IT applied suggested code changes">; def note_fixit_in_macro : Note< @@ -162,6 +176,9 @@ def warn_pch_access_control : Error< def warn_pch_char_signed : Error< "char was %select{unsigned|signed}0 in the PCH file but " "is currently %select{unsigned|signed}1">; +def warn_pch_short_wchar : Error< + "-fshort-wchar was %select{disabled|enabled}0 in the PCH file but " + "is currently %select{disabled|enabled}1">; def err_not_a_pch_file : Error< "'%0' does not appear to be a precompiled header file">, DefaultFatal; diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index 8cfdd4095027..93c655b50500 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -28,7 +28,7 @@ def : DiagGroup<"cast-align">; def : DiagGroup<"cast-qual">; def : DiagGroup<"char-align">; def Comment : DiagGroup<"comment">; -def : DiagGroup<"conversion">; +def : DiagGroup<"ctor-dtor-privacy">; def : DiagGroup<"declaration-after-statement">; def : DiagGroup<"disabled-optimization">; def : DiagGroup<"discard-qual">; @@ -40,6 +40,7 @@ def FormatExtraArgs : DiagGroup<"format-extra-args">; def FormatZeroLength : DiagGroup<"format-zero-length">; def FourByteMultiChar : DiagGroup<"four-char-constants">; +def : DiagGroup<"idiomatic-parentheses">; def : DiagGroup<"import">; def : DiagGroup<"init-self">; def : DiagGroup<"inline">; @@ -58,19 +59,21 @@ def MismatchedTags : DiagGroup<"mismatched-tags">; def : DiagGroup<"missing-field-initializers">; def NonNull : DiagGroup<"nonnull">; def : DiagGroup<"nonportable-cfstrings">; +def : DiagGroup<"non-virtual-dtor">; def : DiagGroup<"old-style-definition">; def : DiagGroup<"overflow">; def : DiagGroup<"overloaded-virtual">; def : DiagGroup<"packed">; -def Parentheses : DiagGroup<"parentheses">; def PointerArith : DiagGroup<"pointer-arith">; def : DiagGroup<"pointer-to-int-cast">; def : DiagGroup<"redundant-decls">; def ReturnType : DiagGroup<"return-type">; +def SemiBeforeMethodBody : DiagGroup<"semicolon-before-method-body">; def : DiagGroup<"sequence-point">; def : DiagGroup<"shadow">; def : DiagGroup<"shorten-64-to-32">; -def : DiagGroup<"sign-compare">; +def SignCompare : DiagGroup<"sign-compare">; +def : DiagGroup<"synth">; // Preprocessor warnings. def : DiagGroup<"builtin-macro-redefined">; @@ -114,6 +117,14 @@ def CharSubscript : DiagGroup<"char-subscripts">; // Aggregation warning settings. +// -Widiomatic-parentheses contains warnings about 'idiomatic' +// missing parentheses; it is off by default. +def Parentheses : DiagGroup<"parentheses", [DiagGroup<"idiomatic-parentheses">]>; + +// -Wconversion has its own warnings, but we split this one out for +// legacy reasons. +def Conversion : DiagGroup<"conversion", + [DiagGroup<"shorten-64-to-32">]>; def Unused : DiagGroup<"unused", [UnusedArgument, UnusedFunction, UnusedLabel, @@ -127,8 +138,9 @@ def FormatY2K : DiagGroup<"format-y2k", [Format]>; def Format2 : DiagGroup<"format=2", [FormatNonLiteral, FormatSecurity, FormatY2K]>; - def Extra : DiagGroup<"extra", [ + SemiBeforeMethodBody, + SignCompare, UnusedParameter ]>; @@ -158,3 +170,7 @@ def : DiagGroup<"all", [Most, Parentheses]>; def : DiagGroup<"", [Extra]>; // -W = -Wextra def : DiagGroup<"endif-labels", [ExtraTokens]>; // endif-labels = endif-tokens +// A warning group for warnings that we want to have on by default in clang, +// but which aren't on by default in GCC. +def NonGCC : DiagGroup<"non-gcc", + [SignCompare, Conversion]>; diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td index bbc551373d96..7f3f4ea1fca0 100644 --- a/include/clang/Basic/DiagnosticLexKinds.td +++ b/include/clang/Basic/DiagnosticLexKinds.td @@ -90,6 +90,14 @@ def warn_octal_escape_too_large : ExtWarn<"octal escape sequence out of range">; def warn_hex_escape_too_large : ExtWarn<"hex escape sequence out of range">; //===----------------------------------------------------------------------===// +// PTH Diagnostics +//===----------------------------------------------------------------------===// +def err_pth_cannot_read : Error< + "PTH file '%0' could not be read">; +def err_invalid_pth_file : Error< + "invalid or corrupt PTH file '%0'">; + +//===----------------------------------------------------------------------===// // Preprocessor Diagnostics //===----------------------------------------------------------------------===// def pp_hash_warning : Warning<"#warning%0">, InGroup<DiagGroup<"#warnings">>; diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index e173cffdfd2b..28c46cd2d707 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -201,9 +201,9 @@ def warn_expected_implementation : Warning< "@end must appear in an @implementation context">; def error_property_ivar_decl : Error< "property synthesize requires specification of an ivar">; -def warn_semicolon_before_method_nody : Warning< +def warn_semicolon_before_method_body : Warning< "semicolon before method body is ignored">, - InGroup<DiagGroup<"semicolon-before-method-body">>; + InGroup<DiagGroup<"semicolon-before-method-body">>, DefaultIgnore; def err_expected_field_designator : Error< "expected a field designator, such as '.field = 4'">; @@ -230,7 +230,7 @@ def ext_ellipsis_exception_spec : Extension< def err_expected_catch : Error<"expected catch">; def err_expected_lbrace_or_comma : Error<"expected '{' or ','">; def err_using_namespace_in_class : Error< - "'using namespace' in class not allowed">; + "'using namespace' is not allowed in classes">; def err_ident_in_pseudo_dtor_not_a_type : Error< "identifier %0 in pseudo-destructor expression does not name a type">; @@ -289,6 +289,10 @@ def err_explicit_spec_non_template : Error< def err_variadic_templates : Error< "variadic templates are only allowed in C++0x">; +def err_default_template_template_parameter_not_template : Error< + "default template argument for a template template parameter must be a class " + "template">; + // C++ declarations def err_friend_decl_defines_class : Error< "cannot define a type in a friend declaration">; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 2309908df7b4..78a3ae5d47b7 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -103,6 +103,8 @@ def err_using_requires_qualname : Error< "using declaration requires a qualified name">; def err_using_typename_non_type : Error< "'typename' keyword used on a non-type">; +def err_using_dependent_value_is_type : Error< + "dependent using declaration resolved to type without 'typename'">; def err_using_decl_nested_name_specifier_is_not_a_base_class : Error< "using declaration refers into '%0', which is not a base class of %1">; def err_using_decl_can_not_refer_to_class_member : Error< @@ -115,6 +117,8 @@ def err_using_decl_destructor : Error< "using declaration can not refer to a destructor">; def err_using_decl_template_id : Error< "using declaration can not refer to a template specialization">; +def note_using_decl_target : Note< + "target of using declaration">; def err_invalid_thread : Error< "'__thread' is only allowed on variable declarations">; @@ -251,6 +255,7 @@ def warn_accessor_property_type_mismatch : Warning< def note_declared_at : Note<"declared at">; def err_setter_type_void : Error<"type of setter must be void">; def err_duplicate_method_decl : Error<"duplicate declaration of method %0">; +def warn_missing_atend : Warning<"'@end' is missing in implementation context">; def err_objc_var_decl_inclass : Error<"cannot declare variable inside @interface or @protocol">; def error_missing_method_context : Error< @@ -269,6 +274,9 @@ def warn_property_attr_mismatch : Warning< def warn_objc_property_copy_missing_on_block : Warning< "'copy' attribute must be specified for the block property " "when -fobjc-gc-only is specified">; +def warn_atomic_property_rule : Warning< + "writable atomic property %0 cannot pair a synthesized setter/getter " + "with a user defined setter/getter">; def err_use_continuation_class : Error< "property declaration in continuation class of %0 is to change a 'readonly' " "property to 'readwrite'">; @@ -397,7 +405,9 @@ def note_ambig_member_ref_scope : Note< "lookup from the current scope refers here">; def err_qualified_member_nonclass : Error< "qualified member access refers to a member in %0">; - +def err_incomplete_member_access : Error< + "member access into incomplete type %0">; + // C++ class members def err_storageclass_invalid_for_member : Error< "storage class specified for a member declaration">; @@ -430,9 +440,15 @@ def err_implicit_object_parameter_init : Error< "cannot initialize object parameter of type %0 with an expression " "of type %1">; -def err_missing_default_constructor : Error< - "default constructor for %1 is missing in initialization of " - "%select{base class|member}0">; +def note_field_decl : Note<"member is declared here">; +def note_previous_class_decl : Note< + "%0 declared here">; +def note_ctor_synthesized_at : Note< + "implicit default constructor for %0 first required here">; +def err_missing_default_ctor : Error< + "%select{|implicit default }0constructor for %1 must explicitly initialize " + "the %select{base class|member}2 %3 which does not have a default " + "constructor">; def err_illegal_union_member : Error< "union member %0 has a non-trivial %select{constructor|" "copy constructor|copy assignment operator|destructor}1">; @@ -632,6 +648,25 @@ def err_cconv_knr : Error< def err_cconv_varargs : Error< "variadic function cannot use '%0' calling convention">; +def warn_impcast_vector_scalar : Warning< + "implicit cast turns vector to scalar: %0 to %1">, + InGroup<DiagGroup<"conversion">>, DefaultIgnore; +def warn_impcast_complex_scalar : Warning< + "implicit cast discards imaginary component: %0 to %1">, + InGroup<DiagGroup<"conversion">>, DefaultIgnore; +def warn_impcast_float_precision : Warning< + "implicit cast loses floating-point precision: %0 to %1">, + InGroup<DiagGroup<"conversion">>, DefaultIgnore; +def warn_impcast_float_integer : Warning< + "implicit cast turns floating-point number into integer: %0 to %1">, + InGroup<DiagGroup<"conversion">>, DefaultIgnore; +def warn_impcast_integer_precision : Warning< + "implicit cast loses integer precision: %0 to %1">, + InGroup<DiagGroup<"conversion">>, DefaultIgnore; +def warn_impcast_integer_64_32 : Warning< + "implicit cast loses integer precision: %0 to %1">, + InGroup<DiagGroup<"shorten-64-to-32">>, DefaultIgnore; + def warn_attribute_ignored_for_field_of_type : Warning< "%0 attribute ignored for field of type %1">; def warn_transparent_union_attribute_field_size_align : Warning< @@ -744,27 +779,18 @@ def err_param_default_argument_member_template_redecl : Error< "default arguments cannot be added to an out-of-line definition of a member " "of a %select{class template|class template partial specialization|nested " "class in a template}0">; -def note_field_decl : Note<"member is declared here">; -def err_defining_default_ctor : Error< - "cannot define the implicit default constructor for %0, because %select{base class|member's type}1 " - "%2 does not have any default constructor">; -def note_previous_class_decl : Note< - "%0 declared here">; def err_uninitialized_member_for_assign : Error< "cannot define the implicit default assignment operator for %0, because " "non-static %select{reference|const}1 member %2 can't use default " "assignment operator">; def note_first_required_here : Note< "synthesized method is first required here">; -def err_unintialized_member : Error< - "cannot define the implicit default constructor for %0, because " - "%select{reference|const}1 member %2 cannot be default-initialized">; def err_null_intialized_reference_member : Error< "cannot initialize the member to null in default constructor because " "reference member %0 cannot be null-initialized">; def err_unintialized_member_in_ctor : Error< - "constructor for %0 must explicitly initialize the " - "%select{reference|const}1 member %2 ">; + "%select{|implicit default }0constructor for %1 must explicitly initialize " + "the %select{reference|const}2 member %3">; 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">; @@ -993,6 +1019,9 @@ def err_template_spec_friend : Error< def err_template_spec_default_arg : Error< "default argument not permitted on an explicit " "%select{instantiation|specialization}0 of function %1">; +def err_not_class_template_specialization : Error< + "cannot specialize a %select{dependent template|template template " + "parameter}0">; // C++ class template specializations and out-of-line definitions def err_template_spec_needs_header : Error< @@ -1083,6 +1112,12 @@ def note_function_template_deduction_instantiation_here : Note< def note_partial_spec_deduct_instantiation_here : Note< "during template argument deduction for class template partial " "specialization %0, here">; +def note_prior_template_arg_substitution : Note< + "while substituting prior template arguments into %select{non-type|template}0" + " template parameter%1 %2">; +def note_template_default_arg_checking : Note< + "while checking a default template argument used here">; + def err_field_instantiates_to_function : Error< "data member instantiated with function type %0">; def err_nested_name_spec_non_tag : Error< @@ -1447,8 +1482,9 @@ def err_typecheck_member_reference_type : Error< "cannot refer to type member %0 with '%select{.|->}1'">; def err_typecheck_member_reference_unknown : Error< "cannot refer to member %0 with '%select{.|->}1'">; -def note_member_reference_needs_call : Note< - "perhaps you meant to call this function with '()'?">; +def err_member_reference_needs_call : Error< + "base of member reference has function type %0; perhaps you meant to call " + "this function with '()'?">; def warn_subscript_is_char : Warning<"array subscript is of type 'char'">, InGroup<CharSubscript>, DefaultIgnore; @@ -1488,6 +1524,9 @@ def err_tentative_def_incomplete_type_arr : Error< "tentative definition has array of type %0 that is never completed">; def warn_tentative_incomplete_array : Warning< "tentative array definition assumed to have one element">; +def err_typecheck_incomplete_array_needs_initializer : Error< + "definition of variable with array type needs an explicit size " + "or an initializer">; def err_realimag_invalid_type : Error<"invalid type %0 to %1 operator">; def err_typecheck_sclass_fscope : Error< @@ -1539,10 +1578,10 @@ def err_stmtexpr_file_scope : Error< "statement expression not allowed at file scope">; def warn_mixed_sign_comparison : Warning< "comparison of integers of different signs: %0 and %1">, - InGroup<DiagGroup<"sign-compare">>; + InGroup<DiagGroup<"sign-compare">>, DefaultIgnore; def warn_mixed_sign_conditional : Warning< "operands of ? are integers of different signs: %0 and %1">, - InGroup<DiagGroup<"sign-compare">>; + InGroup<DiagGroup<"sign-compare">>, DefaultIgnore; def err_invalid_this_use : Error< "invalid use of 'this' outside of a nonstatic member function">; @@ -1707,6 +1746,10 @@ def err_ambiguous_delete_operand : Error<"ambiguous conversion of delete " "expression of type %0 to a pointer">; def warn_delete_incomplete : Warning< "deleting pointer to incomplete type %0 may cause undefined behaviour">; +def err_no_suitable_delete_member_function_found : Error< + "no suitable member %0 in %1">; +def note_delete_member_function_declared_here : Note< + "%0 declared here">; def err_decrement_bool : Error<"cannot decrement expression of type bool">; def warn_increment_bool : Warning< "incrementing expression of type bool is deprecated">; @@ -1786,9 +1829,13 @@ def err_incomplete_object_call : Error< def warn_condition_is_assignment : Warning<"using the result of an " "assignment as a condition without parentheses">, InGroup<Parentheses>; +// Completely identical except off by default. +def warn_condition_is_idiomatic_assignment : Warning<"using the result " + "of an assignment as a condition without parentheses">, + InGroup<DiagGroup<"idiomatic-parentheses">>, DefaultIgnore; -def warn_value_always_zero : Warning<"%0 is always zero in this context">; -def warn_value_always_false : Warning<"%0 is always false in this context">; +def warn_value_always_zero : Warning< + "%0 is always %select{zero|false|NULL}1 in this context">; // assignment related diagnostics (also for argument passing, returning, etc). // FIXME: %2 is an english string here. @@ -1816,6 +1863,8 @@ def ext_typecheck_convert_incompatible_pointer : ExtWarn< "incompatible pointer types %2 %1, expected %0">; def ext_typecheck_convert_discards_qualifiers : ExtWarn< "%2 %1 discards qualifiers, expected %0">; +def ext_nested_pointer_qualifier_mismatch : ExtWarn< + "%2, %0 and %1 have different qualifiers in nested pointer types">; def warn_incompatible_vectors : Warning< "incompatible vector types %2 %1, expected %0">, InGroup<VectorConversions>, DefaultIgnore; @@ -2086,6 +2135,10 @@ def err_operator_overload_needs_class_or_enum : Error< def err_operator_overload_variadic : Error<"overloaded %0 cannot be variadic">; def err_operator_overload_static : Error< "overloaded %0 cannot be a static member function">; +def err_operator_new_param_type : Error< + "%0 takes type size_t (%1) as first parameter">; +def err_operator_new_result_type : Error< + "%0 must return type %1">; def err_operator_overload_default_arg : Error< "parameter of overloaded %0 cannot have a default argument">; def err_operator_overload_must_be : Error< @@ -2328,7 +2381,7 @@ def error_private_ivar_access : Error<"instance variable %0 is private">, NoSFINAE; def error_protected_ivar_access : Error<"instance variable %0 is protected">, NoSFINAE; -def warn_maynot_respond : Warning<"%0 may not respond to %1">; +def warn_maynot_respond : Warning<"%0 may not respond to %1">; def warn_attribute_method_def : Warning< "method attribute can only be specified on method declarations">; def ext_typecheck_base_super : Warning< diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index d4d3fe50eba0..99c100d55e7e 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -55,6 +55,7 @@ public: unsigned POSIXThreads : 1; // Compiling with POSIX thread support // (-pthread) unsigned Blocks : 1; // block extension to C + unsigned BlockIntrospection: 1; // block have ObjC type encodings. unsigned EmitAllDecls : 1; // Emit all declarations, even if // they are unused. unsigned MathErrno : 1; // Math functions must respect errno @@ -83,6 +84,7 @@ public: unsigned AccessControl : 1; // Whether C++ access control should // be enabled. unsigned CharIsSigned : 1; // Whether char is a signed or unsigned type + unsigned ShortWChar : 1; // Force wchar_t to be unsigned short int. unsigned OpenCL : 1; // OpenCL C99 language extensions. @@ -125,7 +127,8 @@ public: ObjCConstantStringClass = 0; C99 = Microsoft = CPlusPlus = CPlusPlus0x = 0; CXXOperatorNames = PascalStrings = WritableStrings = 0; - Exceptions = NeXTRuntime = Freestanding = NoBuiltin = 0; + Exceptions = Freestanding = NoBuiltin = 0; + NeXTRuntime = 1; Rtti = 1; LaxVectorConversions = 1; HeinousExtensions = 0; @@ -137,6 +140,7 @@ public: ThreadsafeStatics = 0; POSIXThreads = 0; Blocks = 0; + BlockIntrospection = 0; EmitAllDecls = 0; MathErrno = 1; @@ -159,6 +163,7 @@ public: NoInline = 0; CharIsSigned = 1; + ShortWChar = 0; MainFileName = 0; } diff --git a/include/clang/Basic/Makefile b/include/clang/Basic/Makefile index 6ed5fefb7e64..b85eb0725ef0 100644 --- a/include/clang/Basic/Makefile +++ b/include/clang/Basic/Makefile @@ -9,12 +9,14 @@ TABLEGEN_INC_FILES_COMMON = 1 include $(LEVEL)/Makefile.common +INPUT_TDS = $(wildcard $(PROJ_SRC_DIR)/Diagnostic*.td) + $(ObjDir)/Diagnostic%Kinds.inc.tmp : Diagnostic.td Diagnostic%Kinds.td $(TBLGEN) $(Echo) "Building Clang $(patsubst Diagnostic%Kinds.inc.tmp,%,$(@F)) diagnostic tables with tblgen" $(Verb) -$(MKDIR) $(@D) $(Verb) $(TableGen) -gen-clang-diags-defs -clang-component=$(patsubst Diagnostic%Kinds.inc.tmp,%,$(@F)) -o $(call SYSPATH, $@) $< -$(ObjDir)/DiagnosticGroups.inc.tmp : Diagnostic.td DiagnosticGroups.td $(wildcard Diagnostic*.td) $(TBLGEN) +$(ObjDir)/DiagnosticGroups.inc.tmp : Diagnostic.td DiagnosticGroups.td $(INPUT_TDS) $(TBLGEN) $(Echo) "Building Clang diagnostic groups with tblgen" $(Verb) -$(MKDIR) $(@D) $(Verb) $(TableGen) -gen-clang-diag-groups -o $(call SYSPATH, $@) $< diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index e61ef9265cfb..695f51d2c4c9 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -28,11 +28,12 @@ class StringRef; } namespace clang { - class Diagnostic; +class LangOptions; class SourceLocation; class SourceManager; -class LangOptions; +class TargetOptions; + namespace Builtin { struct Info; } /// TargetInfo - This class exposes information about the current target. @@ -44,16 +45,12 @@ protected: // values are specified by the TargetInfo constructor. bool TLSSupported; unsigned char PointerWidth, PointerAlign; - unsigned char WCharWidth, WCharAlign; - unsigned char Char16Width, Char16Align; - unsigned char Char32Width, Char32Align; unsigned char IntWidth, IntAlign; unsigned char FloatWidth, FloatAlign; unsigned char DoubleWidth, DoubleAlign; unsigned char LongDoubleWidth, LongDoubleAlign; unsigned char LongWidth, LongAlign; unsigned char LongLongWidth, LongLongAlign; - unsigned char IntMaxTWidth; const char *DescriptionString; const char *UserLabelPrefix; const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat; @@ -63,9 +60,9 @@ protected: TargetInfo(const std::string &T); public: - /// CreateTargetInfo - Return the target info object for the specified target - /// triple. - static TargetInfo* CreateTargetInfo(const std::string &Triple); + /// CreateTargetInfo - Construct a target for the given options. + static TargetInfo* CreateTargetInfo(Diagnostic &Diags, + const TargetOptions &Opts); virtual ~TargetInfo(); @@ -103,6 +100,10 @@ public: /// enum. For example, SignedInt -> getIntWidth(). unsigned getTypeWidth(IntType T) const; + /// getTypeAlign - Return the alignment (in bits) of the specified integer + /// type enum. For example, SignedInt -> getIntAlign(). + unsigned getTypeAlign(IntType T) const; + /// isTypeSigned - Return whether an integer types is signed. Returns true if /// the type is signed; false otherwise. bool isTypeSigned(IntType T) const; @@ -146,18 +147,18 @@ public: /// getWCharWidth/Align - Return the size of 'wchar_t' for this target, in /// bits. - unsigned getWCharWidth() const { return WCharWidth; } - unsigned getWCharAlign() const { return WCharAlign; } + unsigned getWCharWidth() const { return getTypeWidth(WCharType); } + unsigned getWCharAlign() const { return getTypeAlign(WCharType); } /// getChar16Width/Align - Return the size of 'char16_t' for this target, in /// bits. - unsigned getChar16Width() const { return Char16Width; } - unsigned getChar16Align() const { return Char16Align; } + unsigned getChar16Width() const { return getTypeWidth(Char16Type); } + unsigned getChar16Align() const { return getTypeAlign(Char16Type); } /// getChar32Width/Align - Return the size of 'char32_t' for this target, in /// bits. - unsigned getChar32Width() const { return Char32Width; } - unsigned getChar32Align() const { return Char32Align; } + unsigned getChar32Width() const { return getTypeWidth(Char32Type); } + unsigned getChar32Align() const { return getTypeAlign(Char32Type); } /// getFloatWidth/Align/Format - Return the size/align/format of 'float'. unsigned getFloatWidth() const { return FloatWidth; } @@ -180,7 +181,7 @@ public: /// getIntMaxTWidth - Return the size of intmax_t and uintmax_t for this /// target, in bits. unsigned getIntMaxTWidth() const { - return IntMaxTWidth; + return getTypeWidth(IntMaxType); } /// getUserLabelPrefix - This returns the default value of the @@ -341,10 +342,10 @@ public: return ""; } - /// getDefaultLangOptions - Allow the target to specify default settings for - /// various language options. These may be overridden by command line - /// options. - virtual void getDefaultLangOptions(LangOptions &Opts) {} + /// setForcedLangOptions - Set forced language options. + /// Apply changes to the target information with respect to certain + /// language options which change the target configuration. + virtual void setForcedLangOptions(LangOptions &Opts); /// getDefaultFeatures - Get the default set of target features for /// the \args CPU; this should include all legal feature strings on @@ -375,9 +376,10 @@ public: return false; } - /// HandleTargetOptions - Perform initialization based on the user - /// configured set of features. - virtual void HandleTargetFeatures(const llvm::StringMap<bool> &Features) { + /// HandleTargetOptions - Perform initialization based on the user configured + /// set of features (e.g., +sse4). The list is guaranteed to have at most one + /// entry per feature. + virtual void HandleTargetFeatures(const std::vector<std::string> &Features) { } // getRegParmMax - Returns maximal number of args passed in registers. diff --git a/include/clang/Basic/TargetOptions.h b/include/clang/Basic/TargetOptions.h new file mode 100644 index 000000000000..eeaab1558fd1 --- /dev/null +++ b/include/clang/Basic/TargetOptions.h @@ -0,0 +1,39 @@ +//===--- TargetOptions.h ----------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_FRONTEND_TARGETOPTIONS_H +#define LLVM_CLANG_FRONTEND_TARGETOPTIONS_H + +#include <string> +#include <vector> + +namespace clang { + +/// TargetOptions - Options for controlling the target. +class TargetOptions { +public: + + /// If given, the name of the target triple to compile for. If not given the + /// target will be selected to match the host. + std::string Triple; + + /// If given, the name of the target CPU to generate code for. + std::string CPU; + + /// If given, the name of the target ABI to use. + std::string ABI; + + /// The list of target specific features to enable or disable -- this should + /// be a list of strings starting with by '+' or '-'. + std::vector<std::string> Features; +}; + +} // end namespace clang + +#endif |
