diff options
Diffstat (limited to 'include/clang/Basic')
40 files changed, 333 insertions, 262 deletions
diff --git a/include/clang/Basic/ABI.h b/include/clang/Basic/ABI.h index bd919ce24f81f..dc0e49cded631 100644 --- a/include/clang/Basic/ABI.h +++ b/include/clang/Basic/ABI.h @@ -81,12 +81,12 @@ struct ReturnAdjustment { return memcmp(this, &RHS, sizeof(RHS)) < 0; } } Virtual; - + ReturnAdjustment() : NonVirtual(0) {} - + bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); } - friend bool operator==(const ReturnAdjustment &LHS, + friend bool operator==(const ReturnAdjustment &LHS, const ReturnAdjustment &RHS) { return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual); } @@ -103,7 +103,7 @@ struct ReturnAdjustment { return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual); } }; - + /// A \c this pointer adjustment. struct ThisAdjustment { /// The non-virtual adjustment from the derived object to its @@ -149,12 +149,12 @@ struct ThisAdjustment { return memcmp(this, &RHS, sizeof(RHS)) < 0; } } Virtual; - + ThisAdjustment() : NonVirtual(0) { } bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); } - friend bool operator==(const ThisAdjustment &LHS, + friend bool operator==(const ThisAdjustment &LHS, const ThisAdjustment &RHS) { return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual); } @@ -162,12 +162,12 @@ struct ThisAdjustment { friend bool operator!=(const ThisAdjustment &LHS, const ThisAdjustment &RHS) { return !(LHS == RHS); } - + friend bool operator<(const ThisAdjustment &LHS, const ThisAdjustment &RHS) { if (LHS.NonVirtual < RHS.NonVirtual) return true; - + return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual); } }; @@ -179,7 +179,7 @@ class CXXMethodDecl; struct ThunkInfo { /// The \c this pointer adjustment. ThisAdjustment This; - + /// The return adjustment. ReturnAdjustment Return; @@ -204,7 +204,7 @@ struct ThunkInfo { bool isEmpty() const { return This.isEmpty() && Return.isEmpty() && Method == nullptr; } -}; +}; } // end namespace clang diff --git a/include/clang/Basic/AllDiagnostics.h b/include/clang/Basic/AllDiagnostics.h index 20c29d459d229..afec2d7e0f2f6 100644 --- a/include/clang/Basic/AllDiagnostics.h +++ b/include/clang/Basic/AllDiagnostics.h @@ -34,9 +34,9 @@ class StringSizerHelper { public: enum { Size = SizeOfStr }; }; -} // end namespace clang +} // end namespace clang #define STR_SIZE(str, fieldTy) clang::StringSizerHelper<sizeof(str)-1, \ - fieldTy>::Size + fieldTy>::Size #endif diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 0bbe52bf5f36f..fea8e129d7da6 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -141,6 +141,13 @@ def HasFunctionProto : SubsetSubject<DeclBase, isa<BlockDecl>(S)}], "non-K&R-style functions">; +// A subject that matches the implicit object parameter of a non-static member +// function. Accepted as a function type attribute on the type of such a +// member function. +// FIXME: This does not actually ever match currently. +def ImplicitObjectParameter : SubsetSubject<Function, [{false}], + "implicit object parameters">; + // A single argument to an attribute class Argument<string name, bit optional, bit fake = 0> { string Name = name; @@ -456,7 +463,7 @@ class Attr { // Set to true if all of the attribute's arguments should be parsed in an // unevaluated context. bit ParseArgumentsAsUnevaluated = 0; - // Set to true if this attribute meaningful when applied to or inherited + // Set to true if this attribute meaningful when applied to or inherited // in a class template definition. bit MeaningfulToClassTemplateDefinition = 0; // Set to true if this attribute can be used with '#pragma clang attribute'. @@ -583,7 +590,7 @@ def AlignValue : Attr { // the future (and a corresponding C++ attribute), but this can be done // later once we decide if we also want them to have slightly-different // semantics than Intel's align_value. - // + // // Does not get a [[]] spelling because the attribute is not exposed as such // by Intel. GNU<"align_value"> @@ -1211,6 +1218,13 @@ def LayoutVersion : InheritableAttr, TargetSpecificAttr<TargetMicrosoftCXXABI> { let Documentation = [LayoutVersionDocs]; } +def LifetimeBound : InheritableAttr { + let Spellings = [Clang<"lifetimebound", 0>]; + let Subjects = SubjectList<[ParmVar, ImplicitObjectParameter], ErrorDiag>; + let Documentation = [LifetimeBoundDocs]; + let LangOpts = [CPlusPlus]; +} + def TrivialABI : InheritableAttr { // This attribute does not have a C [[]] spelling because it requires the // CPlusPlus language option. @@ -1703,7 +1717,7 @@ def Overloadable : Attr { let Documentation = [OverloadableDocs]; } -def Override : InheritableAttr { +def Override : InheritableAttr { let Spellings = [Keyword<"override">]; let SemaHandler = 0; let Documentation = [Undocumented]; @@ -1782,7 +1796,7 @@ def RequireConstantInit : InheritableAttr { def WorkGroupSizeHint : InheritableAttr { // Does not have a [[]] spelling because it is an OpenCL-related attribute. let Spellings = [GNU<"work_group_size_hint">]; - let Args = [UnsignedArgument<"XDim">, + let Args = [UnsignedArgument<"XDim">, UnsignedArgument<"YDim">, UnsignedArgument<"ZDim">]; let Subjects = SubjectList<[Function], ErrorDiag>; diff --git a/include/clang/Basic/AttrDocs.td b/include/clang/Basic/AttrDocs.td index 5a5ab78b49d11..bb2993eab4bc6 100644 --- a/include/clang/Basic/AttrDocs.td +++ b/include/clang/Basic/AttrDocs.td @@ -2362,6 +2362,22 @@ It is only supported when using the Microsoft C++ ABI. }]; } +def LifetimeBoundDocs : Documentation { + let Category = DocCatFunction; + let Content = [{ +The ``lifetimebound`` attribute indicates that a resource owned by +a function parameter or implicit object parameter +is retained by the return value of the annotated function +(or, for a parameter of a constructor, in the value of the constructed object). +It is only supported in C++. + +This attribute provides an experimental implementation of the facility +described in the C++ committee paper [http://wg21.link/p0936r0](P0936R0), +and is subject to change as the design of the corresponding functionality +changes. + }]; +} + def TrivialABIDocs : Documentation { let Category = DocCatVariable; let Content = [{ diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index edd823754a374..c4d11cd827c13 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -471,6 +471,8 @@ BUILTIN(__builtin_wcslen, "zwC*", "nF") BUILTIN(__builtin_wcsncmp, "iwC*wC*z", "nF") BUILTIN(__builtin_wmemchr, "w*wC*wz", "nF") BUILTIN(__builtin_wmemcmp, "iwC*wC*z", "nF") +BUILTIN(__builtin_wmemcpy, "w*w*wC*z", "nF") +BUILTIN(__builtin_wmemmove, "w*w*wC*z", "nF") BUILTIN(__builtin_return_address, "v*IUi", "n") BUILTIN(__builtin_extract_return_addr, "v*v*", "n") BUILTIN(__builtin_frame_address, "v*IUi", "n") @@ -908,6 +910,8 @@ LIBBUILTIN(wcslen, "zwC*", "f", "wchar.h", ALL_LANGUAGES) LIBBUILTIN(wcsncmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES) LIBBUILTIN(wmemchr, "w*wC*wz", "f", "wchar.h", ALL_LANGUAGES) LIBBUILTIN(wmemcmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES) +LIBBUILTIN(wmemcpy, "w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES) +LIBBUILTIN(wmemmove,"w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES) // C99 // In some systems setjmp is a macro that expands to _setjmp. We undefine @@ -956,7 +960,7 @@ LIBBUILTIN(strlcpy, "zc*cC*z", "f", "string.h", ALL_GNU_LANGUAGES) LIBBUILTIN(strlcat, "zc*cC*z", "f", "string.h", ALL_GNU_LANGUAGES) // id objc_msgSend(id, SEL, ...) LIBBUILTIN(objc_msgSend, "GGH.", "f", "objc/message.h", OBJC_LANG) -// long double objc_msgSend_fpret(id self, SEL op, ...) +// long double objc_msgSend_fpret(id self, SEL op, ...) LIBBUILTIN(objc_msgSend_fpret, "LdGH.", "f", "objc/message.h", OBJC_LANG) // _Complex long double objc_msgSend_fp2ret(id self, SEL op, ...) LIBBUILTIN(objc_msgSend_fp2ret, "XLdGH.", "f", "objc/message.h", OBJC_LANG) diff --git a/include/clang/Basic/BuiltinsAMDGPU.def b/include/clang/Basic/BuiltinsAMDGPU.def index 46cd738ae43f6..4a447eb9f6a8a 100644 --- a/include/clang/Basic/BuiltinsAMDGPU.def +++ b/include/clang/Basic/BuiltinsAMDGPU.def @@ -124,13 +124,13 @@ TARGET_BUILTIN(__builtin_amdgcn_fmed3h, "hhhh", "nc", "gfx9-insts") // Deep learning builtins. //===----------------------------------------------------------------------===// -TARGET_BUILTIN(__builtin_amdgcn_fdot2, "fV2hV2hf", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_sdot2, "SiV2SsV2SsSi", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_udot2, "UiV2UsV2UsUi", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_sdot4, "SiSiSiSi", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_udot4, "UiUiUiUi", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_sdot8, "SiSiSiSi", "nc", "dl-insts") -TARGET_BUILTIN(__builtin_amdgcn_udot8, "UiUiUiUi", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_fdot2, "fV2hV2hfIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_sdot2, "SiV2SsV2SsSiIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_udot2, "UiV2UsV2UsUiIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_sdot4, "SiSiSiSiIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_udot4, "UiUiUiUiIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_sdot8, "SiSiSiSiIb", "nc", "dl-insts") +TARGET_BUILTIN(__builtin_amdgcn_udot8, "UiUiUiUiIb", "nc", "dl-insts") //===----------------------------------------------------------------------===// // Special builtins. diff --git a/include/clang/Basic/BuiltinsPPC.def b/include/clang/Basic/BuiltinsPPC.def index 8cd8a2be20030..9be760853d509 100644 --- a/include/clang/Basic/BuiltinsPPC.def +++ b/include/clang/Basic/BuiltinsPPC.def @@ -58,7 +58,7 @@ BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "") BUILTIN(__builtin_altivec_dss, "vUi", "") BUILTIN(__builtin_altivec_dssall, "v", "") -BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") +BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "") BUILTIN(__builtin_altivec_dstst, "vvC*iUi", "") BUILTIN(__builtin_altivec_dststt, "vvC*iUi", "") diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index 5205b4c210a6f..d30ac14e02fee 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -25,7 +25,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator_range.h" -#include "llvm/Support/Compiler.h" +#include "llvm/Support/Compiler.h" #include <cassert> #include <cstdint> #include <limits> @@ -86,7 +86,7 @@ public: bool isNull() const { return !RemoveRange.isValid(); } - + /// Create a code modification hint that inserts the given /// code string at a specific location. static FixItHint CreateInsertion(SourceLocation InsertionLoc, @@ -99,7 +99,7 @@ public: Hint.BeforePreviousInsertions = BeforePreviousInsertions; return Hint; } - + /// Create a code modification hint that inserts the given /// code from \p FromRange at a specific location. static FixItHint CreateInsertionFromRange(SourceLocation InsertionLoc, @@ -123,7 +123,7 @@ public: static FixItHint CreateRemoval(SourceRange RemoveRange) { return CreateRemoval(CharSourceRange::getTokenRange(RemoveRange)); } - + /// Create a code modification hint that replaces the given /// source range with the given code string. static FixItHint CreateReplacement(CharSourceRange RemoveRange, @@ -133,7 +133,7 @@ public: Hint.CodeToInsert = Code; return Hint; } - + static FixItHint CreateReplacement(SourceRange RemoveRange, StringRef Code) { return CreateReplacement(CharSourceRange::getTokenRange(RemoveRange), Code); @@ -348,7 +348,7 @@ private: unsigned Offset; DiagStatePoint(DiagState *State, unsigned Offset) - : State(State), Offset(Offset) {} + : State(State), Offset(Offset) {} }; /// Description of the diagnostic states and state transitions for a @@ -420,7 +420,7 @@ private: /// Indicates that an unrecoverable error has occurred. bool UnrecoverableErrorOccurred; - + /// Counts for DiagnosticErrorTrap to check whether an error occurred /// during a parsing section, e.g. during parsing a function. unsigned TrapNumErrorsOccurred; @@ -556,7 +556,7 @@ public: /// /// Zero disables the limit. void setErrorLimit(unsigned Limit) { ErrorLimit = Limit; } - + /// Specify the maximum number of template instantiation /// notes to emit along with a given diagnostic. void setTemplateBacktraceLimit(unsigned Limit) { @@ -626,11 +626,11 @@ public: return GetCurDiagState()->SuppressSystemWarnings; } - /// Suppress all diagnostics, to silence the front end when we + /// Suppress all diagnostics, to silence the front end when we /// know that we don't want any more diagnostics to be passed along to the /// client - void setSuppressAllDiagnostics(bool Val = true) { - SuppressAllDiagnostics = Val; + void setSuppressAllDiagnostics(bool Val = true) { + SuppressAllDiagnostics = Val; } bool getSuppressAllDiagnostics() const { return SuppressAllDiagnostics; } @@ -638,12 +638,12 @@ public: /// template types. void setElideType(bool Val = true) { ElideType = Val; } bool getElideType() { return ElideType; } - + /// Set tree printing, to outputting the template difference in a /// tree format. void setPrintTemplateTree(bool Val = false) { PrintTemplateTree = Val; } bool getPrintTemplateTree() { return PrintTemplateTree; } - + /// Set color printing, so the type diffing will inject color markers /// into the output. void setShowColors(bool Val = false) { ShowColors = Val; } @@ -657,7 +657,7 @@ public: ShowOverloads = Val; } OverloadsShown getShowOverloads() const { return ShowOverloads; } - + /// Pretend that the last diagnostic issued was ignored, so any /// subsequent notes will be suppressed, or restore a prior ignoring /// state after ignoring some diagnostics and their notes, possibly in @@ -751,12 +751,12 @@ public: return UncompilableErrorOccurred; } bool hasFatalErrorOccurred() const { return FatalErrorOccurred; } - + /// Determine whether any kind of unrecoverable error has occurred. bool hasUnrecoverableErrorOccurred() const { return FatalErrorOccurred || UnrecoverableErrorOccurred; } - + unsigned getNumWarnings() const { return NumWarnings; } void setNumWarnings(unsigned NumWarnings) { @@ -799,10 +799,10 @@ public: LastDiagLevel = Other.LastDiagLevel; } - /// Reset the state of the diagnostic object to its initial + /// Reset the state of the diagnostic object to its initial /// configuration. void Reset(); - + //===--------------------------------------------------------------------===// // DiagnosticsEngine classification and reporting interfaces. // @@ -875,7 +875,7 @@ public: /// DiagnosticsEngine object itself. void SetDelayedDiagnostic(unsigned DiagID, StringRef Arg1 = "", StringRef Arg2 = ""); - + /// Clear out the current diagnostic. void Clear() { CurDiagID = std::numeric_limits<unsigned>::max(); } @@ -894,7 +894,7 @@ private: friend class DiagnosticErrorTrap; friend class DiagnosticIDs; friend class PartialDiagnostic; - + /// Report the delayed diagnostic. void ReportDelayed(); @@ -1042,7 +1042,7 @@ public: class DiagnosticBuilder { friend class DiagnosticsEngine; friend class PartialDiagnostic; - + mutable DiagnosticsEngine *DiagObj = nullptr; mutable unsigned NumArgs = 0; @@ -1105,7 +1105,7 @@ protected: return Result; } - + public: /// Copy constructor. When copied, this "takes" the diagnostic info from the /// input and neuters it. @@ -1430,8 +1430,8 @@ public: }; /** - * Represents a diagnostic in a form that can be retained until its - * corresponding source manager is destroyed. + * Represents a diagnostic in a form that can be retained until its + * corresponding source manager is destroyed. */ class StoredDiagnostic { unsigned ID; @@ -1444,9 +1444,9 @@ class StoredDiagnostic { public: StoredDiagnostic() = default; StoredDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info); - StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, + StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, StringRef Message); - StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, + StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, StringRef Message, FullSourceLoc Loc, ArrayRef<CharSourceRange> Ranges, ArrayRef<FixItHint> Fixits); @@ -1466,7 +1466,7 @@ public: range_iterator range_begin() const { return Ranges.begin(); } range_iterator range_end() const { return Ranges.end(); } unsigned range_size() const { return Ranges.size(); } - + ArrayRef<CharSourceRange> getRanges() const { return llvm::makeArrayRef(Ranges); } @@ -1476,7 +1476,7 @@ public: fixit_iterator fixit_begin() const { return FixIts.begin(); } fixit_iterator fixit_end() const { return FixIts.end(); } unsigned fixit_size() const { return FixIts.size(); } - + ArrayRef<FixItHint> getFixIts() const { return llvm::makeArrayRef(FixIts); } @@ -1488,7 +1488,7 @@ class DiagnosticConsumer { protected: unsigned NumWarnings = 0; ///< Number of warnings reported unsigned NumErrors = 0; ///< Number of errors reported - + public: DiagnosticConsumer() = default; virtual ~DiagnosticConsumer(); @@ -1506,7 +1506,7 @@ public: /// in between BeginSourceFile() and EndSourceFile(). /// /// \param LangOpts The language options for the source file being processed. - /// \param PP The preprocessor object being used for the source; this is + /// \param PP The preprocessor object being used for the source; this is /// optional, e.g., it may not be present when processing AST source files. virtual void BeginSourceFile(const LangOptions &LangOpts, const Preprocessor *PP = nullptr) {} diff --git a/include/clang/Basic/DiagnosticASTKinds.td b/include/clang/Basic/DiagnosticASTKinds.td index 4fa1db96cb897..3358fc3d70c7a 100644 --- a/include/clang/Basic/DiagnosticASTKinds.td +++ b/include/clang/Basic/DiagnosticASTKinds.td @@ -163,12 +163,26 @@ def note_constexpr_unsupported_unsized_array : Note< def note_constexpr_unsized_array_indexed : Note< "indexing of array without known bound is not allowed " "in a constant expression">; +def note_constexpr_memcpy_type_pun : Note< + "cannot constant evaluate '%select{memcpy|memmove}0' from object of " + "type %1 to object of type %2">; +def note_constexpr_memcpy_nontrivial : Note< + "cannot constant evaluate '%select{memcpy|memmove}0' between objects of " + "non-trivially-copyable type %1">; +def note_constexpr_memcpy_overlap : Note< + "'%select{memcpy|wmemcpy}0' between overlapping memory regions">; +def note_constexpr_memcpy_unsupported : Note< + "'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0' " + "not supported: %select{" + "size to copy (%4) is not a multiple of size of element type %3 (%5)|" + "source is not a contiguous array of at least %4 elements of type %3|" + "destination is not a contiguous array of at least %4 elements of type %3}2">; def warn_integer_constant_overflow : Warning< "overflow in expression; result is %0 with type %1">, InGroup<DiagGroup<"integer-overflow">>; -// This is a temporary diagnostic, and shall be removed once our +// This is a temporary diagnostic, and shall be removed once our // implementation is complete, and like the preceding constexpr notes belongs // in Sema. def note_unimplemented_constexpr_lambda_feature_ast : Note< diff --git a/include/clang/Basic/DiagnosticCommentKinds.td b/include/clang/Basic/DiagnosticCommentKinds.td index ab24582c1180e..ebe62e4738f09 100644 --- a/include/clang/Basic/DiagnosticCommentKinds.td +++ b/include/clang/Basic/DiagnosticCommentKinds.td @@ -83,19 +83,19 @@ def warn_doc_function_method_decl_mismatch : Warning< "%select{a function|a function|an Objective-C method|an Objective-C method|" "a pointer to function}2 declaration">, InGroup<Documentation>, DefaultIgnore; - + def warn_doc_api_container_decl_mismatch : Warning< "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' " "command should not be used in a comment attached to a " "non-%select{class|interface|protocol|struct|union}2 declaration">, InGroup<Documentation>, DefaultIgnore; - + def warn_doc_container_decl_mismatch : Warning< "'%select{\\|@}0%select{classdesign|coclass|dependency|helper" "|helperclass|helps|instancesize|ownership|performance|security|superclass}1' " "command should not be used in a comment attached to a non-container declaration">, InGroup<Documentation>, DefaultIgnore; - + def warn_doc_param_duplicate : Warning< "parameter '%0' is already documented">, InGroup<Documentation>, DefaultIgnore; diff --git a/include/clang/Basic/DiagnosticCommonKinds.td b/include/clang/Basic/DiagnosticCommonKinds.td index 61a73541d0b37..b98b183c9d6f4 100644 --- a/include/clang/Basic/DiagnosticCommonKinds.td +++ b/include/clang/Basic/DiagnosticCommonKinds.td @@ -16,7 +16,7 @@ let Component = "Common" in { // Basic. def fatal_too_many_errors - : Error<"too many errors emitted, stopping now">, DefaultFatal; + : Error<"too many errors emitted, stopping now">, DefaultFatal; def note_declared_at : Note<"declared here">; def note_previous_definition : Note<"previous definition is here">; @@ -97,11 +97,11 @@ def remark_module_lock_timeout : Remark< def err_module_shadowed : Error<"import of shadowed module '%0'">, DefaultFatal; def err_module_build_shadowed_submodule : Error< "build a shadowed submodule '%0'">, DefaultFatal; -def err_module_cycle : Error<"cyclic dependency in module '%0': %1">, +def err_module_cycle : Error<"cyclic dependency in module '%0': %1">, DefaultFatal; def err_module_prebuilt : Error< "error in loading module '%0' from prebuilt module path">, DefaultFatal; -def note_pragma_entered_here : Note<"#pragma entered here">; +def note_pragma_entered_here : Note<"#pragma entered here">; def note_decl_hiding_tag_type : Note< "%1 %0 is hidden by a non-type declaration of %0 here">; def err_attribute_not_type_attr : Error< @@ -115,7 +115,7 @@ let CategoryName = "Nullability Issue" in { def warn_nullability_duplicate : Warning< "duplicate nullability specifier %0">, InGroup<Nullability>; - + def warn_conflicting_nullability_attr_overriding_ret_types : Warning< "conflicting nullability specifier on return types, %0 " "conflicts with existing specifier %1">, @@ -223,7 +223,7 @@ def err_unable_to_rename_temp : Error< "unable to rename temporary '%0' to output file '%1': '%2'">; def err_unable_to_make_temp : Error< "unable to make temporary file: %0">; - + // Modules def err_module_format_unhandled : Error< "no handler registered for module format '%0'">, DefaultFatal; diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index a6be0595e1ae9..7f75f45c65781 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -208,7 +208,7 @@ def err_drv_omp_host_target_not_supported : Error< def err_drv_expecting_fopenmp_with_fopenmp_targets : Error< "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.">; def warn_drv_omp_offload_target_duplicate : Warning< - "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.">, + "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.">, InGroup<OpenMPTarget>; def warn_drv_omp_offload_target_missingbcruntime : Warning< "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.">, @@ -226,6 +226,9 @@ def warn_ignored_clang_option : Warning<"the flag '%0' has been deprecated and w def warn_drv_unsupported_opt_for_target : Warning< "optimization flag '%0' is not supported for target '%1'">, InGroup<IgnoredOptimizationArgument>; +def warn_drv_unsupported_debug_info_opt_for_target : Warning< + "debug information option '%0' is not supported for target '%1'">, + InGroup<UnsupportedTargetOpt>; def warn_c_kext : Warning< "ignoring -fapple-kext which is valid for C++ and Objective-C++ only">; def warn_drv_input_file_unused : Warning< diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td index 6add448871fe5..66287933b7ca3 100644 --- a/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/include/clang/Basic/DiagnosticFrontendKinds.td @@ -36,7 +36,7 @@ def remark_fe_backend_plugin: Remark<"%0">, BackendInfo, InGroup<RemarkBackendPl def note_fe_backend_plugin: Note<"%0">, BackendInfo; def warn_fe_override_module : Warning< - "overriding the module target triple with %0">, + "overriding the module target triple with %0">, InGroup<DiagGroup<"override-module">>; def remark_fe_backend_optimization_remark : Remark<"%0">, BackendInfo, @@ -190,10 +190,10 @@ def err_module_interface_requires_modules_ts : Error< def warn_module_config_mismatch : Warning< "module file %0 cannot be loaded due to a configuration mismatch with the current " "compilation">, InGroup<DiagGroup<"module-file-config-mismatch">>, DefaultError; -def err_module_map_not_found : Error<"module map file '%0' not found">, +def err_module_map_not_found : Error<"module map file '%0' not found">, DefaultFatal; def err_missing_module_name : Error< - "no module name provided; specify one with -fmodule-name=">, + "no module name provided; specify one with -fmodule-name=">, DefaultFatal; def err_missing_module : Error< "no module named '%0' declared in module map file '%1'">, DefaultFatal; diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index 7087db7f0fb89..2156ef93c19fe 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -72,6 +72,7 @@ def UnsupportedNan : DiagGroup<"unsupported-nan">; def UnsupportedAbs : DiagGroup<"unsupported-abs">; def UnsupportedCB : DiagGroup<"unsupported-cb">; def UnsupportedGPOpt : DiagGroup<"unsupported-gpopt">; +def UnsupportedTargetOpt : DiagGroup<"unsupported-target-opt">; def NonLiteralNullConversion : DiagGroup<"non-literal-null-conversion">; def NullConversion : DiagGroup<"null-conversion">; def ImplicitConversionFloatingPointToBool : @@ -287,7 +288,7 @@ def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">; def : DiagGroup<"import">; def GNUIncludeNext : DiagGroup<"gnu-include-next">; def IncompatibleMSStruct : DiagGroup<"incompatible-ms-struct">; -def IncompatiblePointerTypesDiscardsQualifiers +def IncompatiblePointerTypesDiscardsQualifiers : DiagGroup<"incompatible-pointer-types-discards-qualifiers">; def IncompatibleFunctionPointerTypes : DiagGroup<"incompatible-function-pointer-types">; @@ -799,14 +800,14 @@ def Most : DiagGroup<"most", [ UserDefinedWarnings ]>; -// Thread Safety warnings +// Thread Safety warnings def ThreadSafetyAttributes : DiagGroup<"thread-safety-attributes">; def ThreadSafetyAnalysis : DiagGroup<"thread-safety-analysis">; def ThreadSafetyPrecise : DiagGroup<"thread-safety-precise">; def ThreadSafetyReference : DiagGroup<"thread-safety-reference">; def ThreadSafetyNegative : DiagGroup<"thread-safety-negative">; def ThreadSafety : DiagGroup<"thread-safety", - [ThreadSafetyAttributes, + [ThreadSafetyAttributes, ThreadSafetyAnalysis, ThreadSafetyPrecise, ThreadSafetyReference]>; diff --git a/include/clang/Basic/DiagnosticIDs.h b/include/clang/Basic/DiagnosticIDs.h index b610af953fba1..983dcb21cfdfe 100644 --- a/include/clang/Basic/DiagnosticIDs.h +++ b/include/clang/Basic/DiagnosticIDs.h @@ -214,7 +214,7 @@ public: bool ignored; return isBuiltinExtensionDiag(DiagID, ignored); } - + /// Determine whether the given built-in diagnostic ID is for an /// extension of some sort, and whether it is enabled by default. /// @@ -223,14 +223,14 @@ public: /// treated as a warning/error by default. /// static bool isBuiltinExtensionDiag(unsigned DiagID, bool &EnabledByDefault); - + /// Return the lowest-level warning option that enables the specified /// diagnostic. /// /// If there is no -Wfoo flag that controls the diagnostic, this returns null. static StringRef getWarningOptionForDiag(unsigned DiagID); - + /// Return the category number that a specified \p DiagID belongs to, /// or 0 if no category. static unsigned getCategoryNumberForDiag(unsigned DiagID); @@ -240,7 +240,7 @@ public: /// Given a category ID, return the name of the category. static StringRef getCategoryNameFromID(unsigned CategoryID); - + /// Return true if a given diagnostic falls into an ARC diagnostic /// category. static bool isARCDiagnostic(unsigned DiagID); @@ -251,26 +251,26 @@ public: /// The diagnostic should not be reported, but it should cause /// template argument deduction to fail. /// - /// The vast majority of errors that occur during template argument + /// The vast majority of errors that occur during template argument /// deduction fall into this category. SFINAE_SubstitutionFailure, - + /// The diagnostic should be suppressed entirely. /// /// Warnings generally fall into this category. SFINAE_Suppress, - + /// The diagnostic should be reported. /// - /// The diagnostic should be reported. Various fatal errors (e.g., + /// The diagnostic should be reported. Various fatal errors (e.g., /// template instantiation depth exceeded) fall into this category. SFINAE_Report, - + /// The diagnostic is an access-control diagnostic, which will be /// substitution failures in some contexts and reported in others. SFINAE_AccessControl }; - + /// Determines whether the given built-in diagnostic ID is /// for an error that is suppressed if it occurs during C++ template /// argument deduction. @@ -306,7 +306,7 @@ public: private: /// Classify the specified diagnostic ID into a Level, consumable by /// the DiagnosticClient. - /// + /// /// The classification is based on the way the client configured the /// DiagnosticsEngine object. /// diff --git a/include/clang/Basic/DiagnosticLexKinds.td b/include/clang/Basic/DiagnosticLexKinds.td index b5b5e8f654bca..1c960711bccb6 100644 --- a/include/clang/Basic/DiagnosticLexKinds.td +++ b/include/clang/Basic/DiagnosticLexKinds.td @@ -53,7 +53,7 @@ def ext_multi_line_line_comment : Extension<"multi-line // comment">, def ext_line_comment : Extension< "// comments are not allowed in this language">, InGroup<Comment>; -def ext_no_newline_eof : Extension<"no newline at end of file">, +def ext_no_newline_eof : Extension<"no newline at end of file">, InGroup<NewlineEOF>; def warn_no_newline_eof : Warning<"no newline at end of file">, InGroup<NewlineEOF>, DefaultIgnore; @@ -294,7 +294,7 @@ def pp_nonportable_path : NonportablePath, InGroup<DiagGroup<"nonportable-include-path">>; def pp_nonportable_system_path : NonportablePath, DefaultIgnore, InGroup<DiagGroup<"nonportable-system-include-path">>; - + def pp_pragma_once_in_main_file : Warning<"#pragma once in main file">, InGroup<DiagGroup<"pragma-once-outside-header">>; def pp_pragma_sysheader_in_main_file : Warning< @@ -353,7 +353,7 @@ def ext_pp_warning_directive : Extension<"#warning is a language extension">; def ext_pp_extra_tokens_at_eol : ExtWarn< "extra tokens at end of #%0 directive">, InGroup<ExtraTokens>; - + def ext_pp_comma_expr : Extension<"comma operator in operand of #if">; def ext_pp_bad_vaargs_use : Extension< "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro">; @@ -594,7 +594,7 @@ def err_pp_illegal_floating_literal : Error< def err_pp_line_requires_integer : Error< "#line directive requires a positive integer argument">; def ext_pp_line_zero : Extension< - "#line directive with zero argument is a GNU extension">, + "#line directive with zero argument is a GNU extension">, InGroup<GNUZeroLineDirective>; def err_pp_line_invalid_filename : Error< "invalid filename for #line directive">; @@ -736,7 +736,7 @@ def warn_auto_module_import : Warning< def note_implicit_top_level_module_import_here : Note< "submodule of top-level module '%0' implicitly imported here">; def warn_uncovered_module_header : Warning< - "umbrella header for module '%0' does not include header '%1'">, + "umbrella header for module '%0' does not include header '%1'">, InGroup<IncompleteUmbrella>; def warn_mmap_umbrella_dir_not_found : Warning< "umbrella directory '%0' not found">, @@ -755,7 +755,7 @@ def warn_non_modular_include_in_module : Warning< "include of non-modular header inside module '%0': '%1'">, InGroup<NonModularIncludeInModule>, DefaultIgnore; def warn_module_conflict : Warning< - "module '%0' conflicts with already-imported module '%1': %2">, + "module '%0' conflicts with already-imported module '%1': %2">, InGroup<ModuleConflict>; def warn_header_guard : Warning< diff --git a/include/clang/Basic/DiagnosticOptions.def b/include/clang/Basic/DiagnosticOptions.def index 2467b24fd909a..22645654afd81 100644 --- a/include/clang/Basic/DiagnosticOptions.def +++ b/include/clang/Basic/DiagnosticOptions.def @@ -61,9 +61,9 @@ DIAGOPT(ShowOptionNames, 1, 0) /// Show the option name for mappable DIAGOPT(ShowNoteIncludeStack, 1, 0) /// Show include stacks for notes. VALUE_DIAGOPT(ShowCategories, 2, 0) /// Show categories: 0 -> none, 1 -> Number, /// 2 -> Full Name. - -ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics: - + +ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics: + DIAGOPT(ShowColors, 1, 0) /// Show diagnostics with ANSI color sequences. ENUM_DIAGOPT(ShowOverloads, OverloadsShown, 1, Ovl_All) /// Overload candidates to show. diff --git a/include/clang/Basic/DiagnosticOptions.h b/include/clang/Basic/DiagnosticOptions.h index 391e252eaddda..4c5bcb4e8793f 100644 --- a/include/clang/Basic/DiagnosticOptions.h +++ b/include/clang/Basic/DiagnosticOptions.h @@ -91,7 +91,7 @@ protected: public: /// The file to log diagnostic output to. std::string DiagnosticLogFile; - + /// The file to serialize diagnostics to (non-appending). std::string DiagnosticSerializationFile; diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index dd4c81922592f..609dca4f075c7 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -86,7 +86,7 @@ def err_enumerator_list_missing_comma : Error< def err_enumerator_unnamed_no_def : Error< "unnamed enumeration must be a definition">; def ext_cxx11_enum_fixed_underlying_type : Extension< - "enumeration types with a fixed underlying type are a C++11 extension">, + "enumeration types with a fixed underlying type are a C++11 extension">, InGroup<CXX11>; def ext_c_enum_fixed_underlying_type : Extension< "enumeration types with a fixed underlying type are a Microsoft extension">, @@ -101,7 +101,7 @@ def ext_alignof_expr : ExtWarn< "%0 applied to an expression is a GNU extension">, InGroup<GNUAlignofExpression>; def warn_microsoft_dependent_exists : Warning< - "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored">, + "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored">, InGroup<DiagGroup<"microsoft-exists">>; def warn_microsoft_qualifiers_ignored : Warning< "qualifiers after comma in declarator list are ignored">, @@ -134,14 +134,14 @@ def ext_gnu_conditional_expr : Extension< "use of GNU ?: conditional expression extension, omitting middle operand">, InGroup<GNUConditionalOmittedOperand>; def ext_gnu_empty_initializer : Extension< "use of GNU empty initializer extension">, InGroup<GNUEmptyInitializer>; -def ext_gnu_array_range : Extension<"use of GNU array range extension">, +def ext_gnu_array_range : Extension<"use of GNU array range extension">, InGroup<GNUDesignator>; def ext_gnu_missing_equal_designator : ExtWarn< - "use of GNU 'missing =' extension in designator">, + "use of GNU 'missing =' extension in designator">, InGroup<GNUDesignator>; def err_expected_equal_designator : Error<"expected '=' or another designator">; def ext_gnu_old_style_field_designator : ExtWarn< - "use of GNU old-style field designator extension">, + "use of GNU old-style field designator extension">, InGroup<GNUDesignator>; def ext_gnu_case_range : Extension<"use of GNU case range extension">, InGroup<GNUCaseRange>; @@ -168,16 +168,16 @@ def err_unexpected_semi : Error<"unexpected ';' before %0">; def err_expected_fn_body : Error< "expected function body after function declarator">; def warn_attribute_on_function_definition : Warning< - "GCC does not allow %0 attribute in this position on a function definition">, + "GCC does not allow %0 attribute in this position on a function definition">, InGroup<GccCompat>; def warn_gcc_attribute_location : Warning< - "GCC does not allow an attribute in this position on a function declaration">, + "GCC does not allow an attribute in this position on a function declaration">, InGroup<GccCompat>; def warn_gcc_variable_decl_in_for_loop : Warning< "GCC does not allow variable declarations in for loop initializers before " "C99">, InGroup<GccCompat>; def warn_attribute_no_decl : Warning< - "attribute %0 ignored, because it is not attached to a declaration">, + "attribute %0 ignored, because it is not attached to a declaration">, InGroup<IgnoredAttributes>; def err_ms_attributes_not_enabled : Error< "'__declspec' attributes are not enabled; use '-fdeclspec' or " @@ -319,7 +319,7 @@ def warn_cxx98_compat_decltype : Warning< def err_unexpected_scope_on_base_decltype : Error< "unexpected namespace scope prior to decltype">; def err_expected_class_name : Error<"expected class name">; -def err_expected_class_name_not_template : +def err_expected_class_name_not_template : Error<"'typename' is redundant; base classes are implicitly types">; def err_unspecified_vla_size_with_static : Error< "'static' may not be used with an unspecified variable length array size">; @@ -395,7 +395,7 @@ def warn_arc_bridge_cast_nonarc : Warning< "'%0' casts have no effect when not using ARC">, InGroup<DiagGroup<"arc-bridge-casts-disallowed-in-nonarc">>; } - + def err_objc_illegal_visibility_spec : Error< "illegal visibility specification">; def err_objc_illegal_interface_qual : Error<"illegal interface qualifier">; @@ -687,7 +687,7 @@ def warn_cxx98_compat_extern_template : Warning< def warn_static_inline_explicit_inst_ignored : Warning< "ignoring '%select{static|inline}0' keyword on explicit template " "instantiation">, InGroup<DiagGroup<"static-inline-explicit-instantiation">>; - + // Constructor template diagnostics. def err_out_of_line_constructor_template_id : Error< "out-of-line constructor for %0 cannot have template arguments">; @@ -703,7 +703,7 @@ def err_expected_type_name_after_typename : Error< "expected an identifier or template-id after '::'">; def err_explicit_spec_non_template : Error< "explicit %select{specialization|instantiation}0 of non-template %1 %2">; - + def err_default_template_template_parameter_not_template : Error< "default template argument for a template template parameter must be a class " "template">; @@ -850,7 +850,7 @@ def err_zero_version : Error< "version number must have non-zero major, minor, or sub-minor version">; def err_availability_expected_platform : Error< "expected a platform name, e.g., 'macos'">; - + // objc_bridge_related attribute def err_objcbridge_related_expected_related_class : Error< "expected a related ObjectiveC class name, e.g., 'NSColor'">; @@ -994,7 +994,7 @@ def warn_pragma_init_seg_unsupported_target : Warning< // - #pragma fp_contract def err_pragma_fp_contract_scope : Error< "'#pragma fp_contract' can only appear at file scope or at the start of a " - "compound statement">; + "compound statement">; // - #pragma stdc unknown def ext_stdc_pragma_ignored : ExtWarn<"unknown pragma in STDC namespace">, InGroup<UnknownPragmas>; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index d0a2bec780527..586f65e9201cf 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -243,7 +243,7 @@ def err_invalid_vector_double_decl_spec : Error < "(available on POWER7 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) " + "POWER7 or later) or extended Altivec support (available on POWER8 or later) " "to be enabled">; def err_invalid_vector_long_double_decl_spec : Error< "cannot use 'long double' with '__vector'">; @@ -388,7 +388,7 @@ def err_inline_non_function : Error< "'inline' can only appear on functions%select{| and non-local variables}0">; def err_noreturn_non_function : Error< "'_Noreturn' can only appear on functions">; -def warn_qual_return_type : Warning< +def warn_qual_return_type : Warning< "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect">, InGroup<IgnoredQualifiers>, DefaultIgnore; def warn_deprecated_redundant_constexpr_static_def : Warning< @@ -640,8 +640,8 @@ def warn_dyn_class_memaccess : Warning< def note_bad_memaccess_silence : Note< "explicitly cast the pointer to silence this warning">; def warn_sizeof_pointer_expr_memaccess : Warning< - "'%0' call operates on objects of type %1 while the size is based on a " - "different type %2">, + "'%0' call operates on objects of type %1 while the size is based on a " + "different type %2">, InGroup<SizeofPointerMemaccess>; def warn_sizeof_pointer_expr_memaccess_note : Note< "did you mean to %select{dereference the argument to 'sizeof' (and multiply " @@ -679,14 +679,14 @@ def note_suspicious_bzero_size_silence : Note< "parenthesize the second argument to silence">; def warn_strncat_large_size : Warning< - "the value of the size argument in 'strncat' is too large, might lead to a " + "the value of the size argument in 'strncat' is too large, might lead to a " "buffer overflow">, InGroup<StrncatSize>; -def warn_strncat_src_size : Warning<"size argument in 'strncat' call appears " +def warn_strncat_src_size : Warning<"size argument in 'strncat' call appears " "to be size of the source">, InGroup<StrncatSize>; def warn_strncat_wrong_size : Warning< "the value of the size argument to 'strncat' is wrong">, InGroup<StrncatSize>; def note_strncat_wrong_size : Note< - "change the argument to be the free space in the destination buffer minus " + "change the argument to be the free space in the destination buffer minus " "the terminating null byte">; def warn_assume_side_effects : Warning< @@ -1030,15 +1030,15 @@ def note_property_attribute : Note<"property %0 is declared " "%select{deprecated|unavailable|partial}1 here">; 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_duplicate_method_decl : - Warning<"multiple declarations of method %0 found and ignored">, +def warn_duplicate_method_decl : + Warning<"multiple declarations of method %0 found and ignored">, InGroup<MethodDuplicate>, DefaultIgnore; def warn_objc_cdirective_format_string : Warning<"using %0 directive in %select{NSString|CFString}1 " "which is being passed as a formatting argument to the formatting " "%select{method|CFfunction}2">, InGroup<ObjCCStringFormat>, DefaultIgnore; -def err_objc_var_decl_inclass : +def err_objc_var_decl_inclass : Error<"cannot declare variable inside @interface or @protocol">; def err_missing_method_context : Error< "missing context for method declaration">; @@ -1250,7 +1250,7 @@ def warn_auto_implicit_atomic_property : Warning< "property is assumed atomic when auto-synthesizing the property">, InGroup<ImplicitAtomic>, DefaultIgnore; def warn_unimplemented_selector: Warning< - "no method with selector %0 is implemented in this translation unit">, + "no method with selector %0 is implemented in this translation unit">, InGroup<Selector>, DefaultIgnore; def warn_unimplemented_protocol_method : Warning< "method %0 in protocol %1 not implemented">, InGroup<Protocol>; @@ -1379,7 +1379,7 @@ def err_capture_default_non_local : Error< "non-local lambda expression cannot have a capture-default">; def err_multiple_final_overriders : Error< - "virtual function %q0 has more than one final overrider in %1">; + "virtual function %q0 has more than one final overrider in %1">; def note_final_overrider : Note<"final overrider of %q0 in %1">; def err_type_defined_in_type_specifier : Error< @@ -1421,7 +1421,7 @@ def warn_weak_template_vtable : Warning< def ext_using_undefined_std : ExtWarn< "using directive refers to implicitly-defined namespace 'std'">; - + // C++ exception specifications def err_exception_spec_in_typedef : Error< "exception specifications are not allowed in %select{typedefs|type aliases}0">; @@ -1475,7 +1475,7 @@ def ext_ms_using_declaration_inaccessible : ExtWarn< "to accessible member '%1') is a Microsoft compatibility extension">, AccessControl, InGroup<MicrosoftUsingDecl>; def err_access_ctor : Error< - "calling a %select{private|protected}0 constructor of class %2">, + "calling a %select{private|protected}0 constructor of class %2">, AccessControl; def ext_rvalue_to_reference_access_ctor : Extension< "C++98 requires an accessible copy constructor for class %2 when binding " @@ -1498,7 +1498,7 @@ def err_access_friend_function : Error< AccessControl; def err_access_dtor : Error< - "calling a %select{private|protected}1 destructor of class %0">, + "calling a %select{private|protected}1 destructor of class %0">, AccessControl; def err_access_dtor_base : Error<"base class %0 has %select{private|protected}1 destructor">, @@ -1540,7 +1540,7 @@ def note_access_protected_restricted_object : Note< def warn_cxx98_compat_sfinae_access_control : Warning< "substitution failure due to access control is incompatible with C++98">, InGroup<CXX98Compat>, DefaultIgnore, NoSFINAE; - + // C++ name lookup def err_incomplete_nested_name_spec : Error< "incomplete type %0 named in nested name specifier">; @@ -1733,6 +1733,8 @@ def warn_overriding_method_missing_noescape : Warning< "__attribute__((noescape))">, InGroup<MissingNoEscape>; def note_overridden_marked_noescape : Note< "parameter of overridden method is annotated with __attribute__((noescape))">; +def note_cat_conform_to_noescape_prot : Note< + "%select{category|class extension}0 conforms to protocol %1 which defines method %2">; def err_covariant_return_inaccessible_base : Error< "invalid covariant return for virtual function: %1 is a " @@ -1979,7 +1981,7 @@ def note_explicit_ctor_deduction_guide_here : Note< // C++11 decltype def err_decltype_in_declarator : Error< "'decltype' cannot be used to name a declaration">; - + // C++11 auto def warn_cxx98_compat_auto_type_specifier : Warning< "'auto' type specifier is incompatible with C++98">, @@ -2632,7 +2634,7 @@ def warn_objc_literal_comparison : Warning< def err_missing_atsign_prefix : Error< "string literal must be prefixed by '@' ">; def warn_objc_string_literal_comparison : Warning< - "direct comparison of a string literal has undefined behavior">, + "direct comparison of a string literal has undefined behavior">, InGroup<ObjCStringComparison>; def warn_concatenated_nsarray_literal : Warning< "concatenated NSString literal for an NSArray expression - " @@ -2746,7 +2748,7 @@ def warn_cxx11_gnu_attribute_on_type : Warning< "attribute %0 ignored, because it cannot be applied to a type">, InGroup<IgnoredAttributes>; def warn_unhandled_ms_attribute_ignored : Warning< - "__declspec attribute %0 is not supported">, + "__declspec attribute %0 is not supported">, InGroup<IgnoredAttributes>; def err_decl_attribute_invalid_on_stmt : Error< "%0 attribute cannot be applied to a statement">; @@ -3001,7 +3003,7 @@ def err_attribute_argument_out_of_range : Error< "1:can only be 1, since there is one parameter|" ":must be between 1 and %2}2">; -// Thread Safety Analysis +// Thread Safety Analysis def warn_unlock_but_no_lock : Warning<"releasing %0 '%1' that was not held">, InGroup<ThreadSafetyAnalysis>, DefaultIgnore; def warn_unlock_kind_mismatch : Warning< @@ -3015,7 +3017,7 @@ def warn_no_unlock : Warning< InGroup<ThreadSafetyAnalysis>, DefaultIgnore; def warn_expecting_locked : Warning< "expecting %0 '%1' to be held at the end of function">, - InGroup<ThreadSafetyAnalysis>, DefaultIgnore; + InGroup<ThreadSafetyAnalysis>, DefaultIgnore; // FIXME: improve the error message about locks not in scope def warn_lock_some_predecessors : Warning< "%0 '%1' is not held on every path through here">, @@ -3092,13 +3094,13 @@ def warn_fun_requires_lock_precise : def note_found_mutex_near_match : Note<"found near match '%0'">; // Verbose thread safety warnings -def warn_thread_safety_verbose : Warning<"Thread safety verbose warning.">, +def warn_thread_safety_verbose : Warning<"Thread safety verbose warning.">, InGroup<ThreadSafetyVerbose>, DefaultIgnore; def note_thread_warning_in_fun : Note<"Thread warning in function %0">; def note_guarded_by_declared_here : Note<"Guarded_by declared here.">; -// Dummy warning that will trigger "beta" warnings from the analysis if enabled. -def warn_thread_safety_beta : Warning<"Thread safety beta warning.">, +// Dummy warning that will trigger "beta" warnings from the analysis if enabled. +def warn_thread_safety_beta : Warning<"Thread safety beta warning.">, InGroup<ThreadSafetyBeta>, DefaultIgnore; // Consumed warnings @@ -3354,7 +3356,7 @@ def err_attribute_sentinel_not_zero_or_one : Error< "'sentinel' parameter 2 not 0 or 1">; def warn_cleanup_ext : Warning< "GCC does not allow the 'cleanup' attribute argument to be anything other " - "than a simple identifier">, + "than a simple identifier">, InGroup<GccCompat>; def err_attribute_cleanup_arg_not_function : Error< "'cleanup' argument %select{|%1 |%1 }0is not a %select{||single }0function">; @@ -3389,7 +3391,7 @@ def warn_iboutlet_object_type : Warning< def warn_iboutletcollection_property_assign : Warning< "IBOutletCollection properties should be copy/strong and not assign">, InGroup<ObjCInvalidIBOutletProperty>; - + def err_attribute_overloadable_mismatch : Error< "redeclaration of %0 must %select{not |}1have the 'overloadable' attribute">; def note_attribute_overloadable_prev_overload : Note< @@ -3854,7 +3856,7 @@ def note_template_param_different_kind : Note< def err_invalid_decl_specifier_in_nontype_parm : Error< "invalid declaration specifier in template non-type parameter">; - + def err_template_nontype_parm_different_type : Error< "template non-type parameter has a different type %0 in template " "%select{|template parameter }1redeclaration">; @@ -4156,7 +4158,7 @@ def err_dependent_typed_non_type_arg_in_partial_spec : Error< def err_partial_spec_args_match_primary_template : Error< "%select{class|variable}0 template partial specialization does not " "specialize any template argument; to %select{declare|define}1 the " - "primary template, remove the template argument list">; + "primary template, remove the template argument list">; def ext_partial_spec_not_more_specialized_than_primary : ExtWarn< "%select{class|variable}0 template partial specialization is not " "more specialized than the primary template">, DefaultError, @@ -4191,7 +4193,7 @@ def err_var_spec_no_template : Error< def err_var_spec_no_template_but_method : Error< "no variable template matches specialization; " "did you mean to use %0 as function template instead?">; - + // C++ Function template specializations def err_function_template_spec_no_match : Error< "no function template matches function template specialization %0">; @@ -4312,12 +4314,12 @@ def err_explicit_instantiation_out_of_scope : Error< def err_explicit_instantiation_must_be_global : Error< "explicit instantiation of %0 must occur at global scope">; def warn_explicit_instantiation_out_of_scope_0x : Warning< - "explicit instantiation of %0 not in a namespace enclosing %1">, + "explicit instantiation of %0 not in a namespace enclosing %1">, InGroup<CXX11Compat>, DefaultIgnore; def warn_explicit_instantiation_must_be_global_0x : Warning< - "explicit instantiation of %0 must occur at global scope">, + "explicit instantiation of %0 must occur at global scope">, InGroup<CXX11Compat>, DefaultIgnore; - + def err_explicit_instantiation_requires_name : Error< "explicit instantiation declaration requires a name">; def err_explicit_instantiation_of_typedef : Error< @@ -4378,7 +4380,7 @@ def err_mismatched_exception_spec_explicit_instantiation : Error< def ext_mismatched_exception_spec_explicit_instantiation : ExtWarn< err_mismatched_exception_spec_explicit_instantiation.Text>, InGroup<MicrosoftExceptionSpec>; - + // C++ typename-specifiers def err_typename_nested_not_found : Error<"no type named %0 in %1">; def err_typename_nested_not_found_enable_if : Error< @@ -4456,7 +4458,7 @@ def note_template_parameter_pack_non_pack : Note< def note_template_parameter_pack_here : Note< "previous %select{template type|non-type template|template template}0 " "parameter%select{| pack}1 declared here">; - + 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|" @@ -4560,7 +4562,7 @@ 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 'void' to make it a prototype for a zero-parameter function">; + "this declaration is not a prototype; add 'void' to make it a prototype for a zero-parameter function">; 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">, @@ -4768,7 +4770,7 @@ def ext_ms_forward_ref_enum : ExtWarn< def ext_forward_ref_enum_def : Extension< "redeclaration of already-defined enum %0 is a GNU extension">, InGroup<GNURedeclaredEnum>; - + def err_redefinition_of_enumerator : Error<"redefinition of enumerator %0">; def err_duplicate_member : Error<"duplicate member %0">; def err_misplaced_ivar : Error< @@ -4787,7 +4789,7 @@ def ext_enumerator_increment_too_large : ExtWarn< def warn_flag_enum_constant_out_of_range : Warning< "enumeration value %0 is out of range of flags in enumeration type %1">, InGroup<FlagEnum>; - + def warn_illegal_constant_array_size : Extension< "size of static array must be an integer constant expression">; def err_vm_decl_in_file_scope : Error< @@ -4892,7 +4894,7 @@ def err_illegal_initializer : Error< "illegal initializer (only variables can be initialized)">; 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">, + "type %0 cannot be narrowed to %1 in initializer list">, InGroup<CXX11Narrowing>, DefaultError, SFINAEFailure; def ext_init_list_variable_narrowing : ExtWarn< "non-constant-expression cannot be narrowed from type %0 to %1 in " @@ -5230,9 +5232,9 @@ def err_arc_illegal_method_def : Error< def warn_arc_strong_pointer_objc_pointer : Warning< "method parameter of type %0 with no explicit ownership">, InGroup<DiagGroup<"explicit-ownership-type">>, DefaultIgnore; - + } // end "ARC Restrictions" category - + def err_arc_lost_method_convention : Error< "method was declared as %select{an 'alloc'|a 'copy'|an 'init'|a 'new'}0 " "method, but its implementation doesn't match because %select{" @@ -5301,7 +5303,7 @@ def warn_receiver_forward_instance : Warning< InGroup<ForwardClassReceiver>, DefaultIgnore; def err_arc_collection_forward : Error< "collection expression type %0 is a forward declaration">; -def err_arc_multiple_method_decl : Error< +def err_arc_multiple_method_decl : Error< "multiple methods named %0 found with mismatched result, " "parameter type or attributes">; def warn_arc_lifetime_result_type : Warning< @@ -5694,7 +5696,7 @@ def warn_namespace_member_extra_qualification : Warning< "extra qualification on member %0">, InGroup<DiagGroup<"extra-qualification">>; def err_member_qualification : Error< - "non-friend class member %0 cannot have a qualified name">; + "non-friend class member %0 cannot have a qualified name">; def note_member_def_close_match : Note<"member declaration nearly matches">; def note_member_def_close_const_match : Note< "member declaration does not match because " @@ -5800,7 +5802,7 @@ def err_typecheck_invalid_lvalue_addrof_addrof_function : Error< def err_typecheck_invalid_lvalue_addrof : Error< "cannot take the address of an rvalue of type %0">; def ext_typecheck_addrof_temporary : ExtWarn< - "taking the address of a temporary object of type %0">, + "taking the address of a temporary object of type %0">, InGroup<AddressOfTemporary>, DefaultError; def err_typecheck_addrof_temporary : Error< "taking the address of a temporary object of type %0">; @@ -5911,7 +5913,7 @@ def warn_mixed_sign_comparison : Warning< "comparison of integers of different signs: %0 and %1">, InGroup<SignCompare>, DefaultIgnore; def warn_out_of_range_compare : Warning< - "result of comparison of %select{constant %0|true|false}1 with " + "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>, @@ -6069,7 +6071,7 @@ def err_no_subobject_property_setting : Error< "expression is not assignable">; def err_qualified_objc_access : Error< "%select{property|instance variable}0 access cannot be qualified with '%1'">; - + def ext_freestanding_complex : Extension< "complex numbers are an extension in a freestanding C99 implementation">; @@ -6235,13 +6237,13 @@ def warn_cxx98_compat_cast_fn_obj : Warning< def err_bad_reinterpret_cast_small_int : Error< "cast from pointer to smaller type %2 loses information">; def err_bad_cxx_cast_vector_to_scalar_different_size : Error< - "%select{||reinterpret_cast||C-style cast|}0 from vector %1 " + "%select{||reinterpret_cast||C-style cast|}0 from vector %1 " "to scalar %2 of different size">; def err_bad_cxx_cast_scalar_to_vector_different_size : Error< - "%select{||reinterpret_cast||C-style cast|}0 from scalar %1 " + "%select{||reinterpret_cast||C-style cast|}0 from scalar %1 " "to vector %2 of different size">; def err_bad_cxx_cast_vector_to_vector_different_size : Error< - "%select{||reinterpret_cast||C-style cast|}0 from vector %1 " + "%select{||reinterpret_cast||C-style cast|}0 from vector %1 " "to vector %2 of different size">; def err_bad_lvalue_to_rvalue_cast : Error< "cannot cast from lvalue of type %1 to rvalue reference type %2; types are " @@ -6643,7 +6645,7 @@ def err_typecheck_nonviable_condition_incomplete : Error< def err_typecheck_deleted_function : Error< "conversion function %diff{from $ to $|between types}0,1 " "invokes a deleted function">; - + 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 " @@ -7011,11 +7013,11 @@ def err_typecheck_call_too_many_args_at_most_suggest : Error< "too many %select{|||execution configuration }0arguments to " "%select{function|block|method|kernel function}0 call, " "expected at most %1, have %2; did you mean %3?">; - + def err_arc_typecheck_convert_incompatible_pointer : Error< "incompatible pointer types passing retainable parameter of type %0" "to a CF function expecting %1 type">; - + def err_builtin_fn_use : Error<"builtin functions must be directly called">; def warn_call_wrong_number_of_arguments : Warning< @@ -7129,7 +7131,8 @@ def err_shared_var_init : Error< "initialization is not supported for __shared__ variables.">; def err_device_static_local_var : Error< "within a %select{__device__|__global__|__host__|__host__ __device__}0 " - "function, only __shared__ variables may be marked 'static'">; + "function, only __shared__ variables or const variables without device " + "memory qualifier may be marked 'static'">; def err_cuda_vla : Error< "cannot use variable-length arrays in " "%select{__device__|__global__|__host__|__host__ __device__}0 functions">; @@ -7505,8 +7508,8 @@ def err_reference_to_local_in_enclosing_context : Error< "%select{%3|block literal|lambda expression|context}2">; def err_static_data_member_not_allowed_in_local_class : Error< - "static data member %0 not allowed in local class %1">; - + "static data member %0 not allowed in local class %1">; + // C++ derived classes def err_base_clause_on_union : Error<"unions cannot have base classes">; def err_base_must_be_class : Error<"base specifier must name a class">; @@ -7851,6 +7854,13 @@ def warn_null_ret : Warning< "null returned from %select{function|method}0 that requires a non-null return value">, InGroup<NonNull>; +def err_lifetimebound_no_object_param : Error< + "'lifetimebound' attribute cannot be applied; %select{static |non-}0member " + "function has no implicit object parameter">; +def err_lifetimebound_ctor_dtor : Error< + "'lifetimebound' attribute cannot be applied to a " + "%select{constructor|destructor}0">; + // CHECK: returning address/reference of stack memory def warn_ret_stack_addr_ref : Warning< "%select{address of|reference to}0 stack memory associated with " @@ -7865,7 +7875,8 @@ def warn_ret_addr_label : Warning< def err_ret_local_block : Error< "returning block that lives on the local stack">; def note_local_var_initializer : Note< - "%select{via initialization of|binding reference}0 variable %1 here">; + "%select{via initialization of|binding reference}0 variable " + "%select{%2 |}1here">; def note_init_with_default_member_initalizer : Note< "initializing field %0 with default member initializer">; @@ -7897,13 +7908,14 @@ def note_lifetime_extending_member_declared_here : Note< "member with %select{reference|'std::initializer_list'}0 subobject}1 " "declared here">; def warn_dangling_variable : Warning< - "%select{temporary %select{whose address is used as value of|bound to}3 " - "%select{%select{|reference }3member of local variable|" - "local %select{variable|reference}3}1|" + "%select{temporary %select{whose address is used as value of|" + "%select{|implicitly }2bound to}4 " + "%select{%select{|reference }4member of local variable|" + "local %select{variable|reference}4}1|" "array backing " "%select{initializer list subobject of local variable|" "local initializer list}1}0 " - "%2 will be destroyed at the end of the full-expression">, + "%select{%3 |}2will be destroyed at the end of the full-expression">, InGroup<Dangling>; def warn_new_dangling_reference : Warning< "temporary bound to reference member of allocated object " @@ -8219,7 +8231,7 @@ def err_vector_incorrect_num_initializers : Error< def err_altivec_empty_initializer : Error<"expected initializer">; def err_invalid_neon_type_code : Error< - "incompatible constant for this __builtin_neon function">; + "incompatible constant for this __builtin_neon function">; def err_argument_invalid_range : Error< "argument value %0 is outside the valid range [%1, %2]">; def warn_argument_invalid_range : Warning< @@ -8275,7 +8287,7 @@ def err_constant_integer_arg_type : Error< def ext_mixed_decls_code : Extension< "ISO C90 forbids mixing declarations and code">, InGroup<DiagGroup<"declaration-after-statement">>; - + def err_non_local_variable_decl_in_for : Error< "declaration of non-local variable in 'for' loop">; def err_non_variable_decl_in_for : Error< @@ -8343,7 +8355,7 @@ def warn_nsconsumed_attribute_mismatch : Warning< err_nsconsumed_attribute_mismatch.Text>, InGroup<NSConsumedMismatch>; def warn_nsreturns_retained_attribute_mismatch : Warning< err_nsreturns_retained_attribute_mismatch.Text>, InGroup<NSReturnsMismatch>; - + def note_getter_unavailable : Note< "or because setter is declared here, but no getter method %0 is found">; def err_invalid_protocol_qualifiers : Error< @@ -8599,7 +8611,7 @@ def err_opencl_extern_block_declaration : Error< def err_opencl_block_ref_block : Error< "cannot refer to a block inside block">; -// OpenCL v2.0 s6.13.9 - Address space qualifier functions. +// OpenCL v2.0 s6.13.9 - Address space qualifier functions. def err_opencl_builtin_to_addr_arg_num : Error< "invalid number of arguments to function: %0">; def err_opencl_builtin_to_addr_invalid_arg : Error< diff --git a/include/clang/Basic/DiagnosticSerializationKinds.td b/include/clang/Basic/DiagnosticSerializationKinds.td index 3a552e2f3db42..54237d16f5c10 100644 --- a/include/clang/Basic/DiagnosticSerializationKinds.td +++ b/include/clang/Basic/DiagnosticSerializationKinds.td @@ -49,7 +49,7 @@ def err_pch_diagopt_mismatch : Error<"%0 is currently enabled, but was not in " "the PCH file">; def err_pch_modulecache_mismatch : Error<"PCH was compiled with module cache " "path '%0', but the path is currently '%1'">; - + def err_pch_version_too_old : Error< "PCH file uses an older PCH format that is no longer supported">; def err_pch_version_too_new : Error< diff --git a/include/clang/Basic/FileSystemStatCache.h b/include/clang/Basic/FileSystemStatCache.h index 45aded527c1bd..1ec344623a0dc 100644 --- a/include/clang/Basic/FileSystemStatCache.h +++ b/include/clang/Basic/FileSystemStatCache.h @@ -62,7 +62,7 @@ protected: public: virtual ~FileSystemStatCache() = default; - + enum LookupResult { /// We know the file exists and its cached stat data. CacheExists, @@ -90,10 +90,10 @@ public: void setNextStatCache(std::unique_ptr<FileSystemStatCache> Cache) { NextStatCache = std::move(Cache); } - + /// Retrieve the next stat call cache in the chain. FileSystemStatCache *getNextStatCache() { return NextStatCache.get(); } - + /// Retrieve the next stat call cache in the chain, transferring /// ownership of this cache (and, transitively, all of the remaining caches) /// to the caller. diff --git a/include/clang/Basic/IdentifierTable.h b/include/clang/Basic/IdentifierTable.h index f43df5c64829d..c2e9c71b0f0d2 100644 --- a/include/clang/Basic/IdentifierTable.h +++ b/include/clang/Basic/IdentifierTable.h @@ -63,7 +63,7 @@ class IdentifierInfo { bool IsPoisoned : 1; // True if identifier is poisoned. bool IsCPPOperatorKeyword : 1; // True if ident is a C++ operator keyword. bool NeedsHandleIdentifier : 1; // See "RecomputeNeedsHandleIdentifier". - bool IsFromAST : 1; // True if identifier was loaded (at least + bool IsFromAST : 1; // True if identifier was loaded (at least // partially) from an AST file. bool ChangedAfterLoad : 1; // True if identifier has changed from the // definition loaded from an AST file. @@ -308,7 +308,7 @@ public: bool hasChangedSinceDeserialization() const { return ChangedAfterLoad; } - + /// Note that this identifier has changed since it was loaded from /// an AST file. void setChangedSinceDeserialization() { @@ -320,7 +320,7 @@ public: bool hasFETokenInfoChangedSinceDeserialization() const { return FEChangedAfterLoad; } - + /// Note that the frontend token information for this identifier has /// changed since it was loaded from an AST file. void setFETokenInfoChangedSinceDeserialization() { @@ -330,7 +330,7 @@ public: /// Determine whether the information for this identifier is out of /// date with respect to the external source. bool isOutOfDate() const { return OutOfDate; } - + /// Set whether the information for this identifier is out of /// date with respect to the external source. void setOutOfDate(bool OOD) { @@ -340,10 +340,10 @@ public: else RecomputeNeedsHandleIdentifier(); } - + /// Determine whether this is the contextual keyword \c import. bool isModulesImport() const { return IsModulesImport; } - + /// Set whether this identifier is the contextual keyword \c import. void setModulesImport(bool I) { IsModulesImport = I; @@ -419,7 +419,7 @@ public: class IdentifierIterator { protected: IdentifierIterator() = default; - + public: IdentifierIterator(const IdentifierIterator &) = delete; IdentifierIterator &operator=(const IdentifierIterator &) = delete; @@ -490,7 +490,7 @@ public: IdentifierInfoLookup *getExternalIdentifierLookup() const { return ExternalLookup; } - + llvm::BumpPtrAllocator& getAllocator() { return HashTable.getAllocator(); } @@ -572,7 +572,7 @@ public: void AddKeywords(const LangOptions &LangOpts); }; -/// A family of Objective-C methods. +/// A family of Objective-C methods. /// /// These families have no inherent meaning in the language, but are /// nonetheless central enough in the existing implementations to @@ -687,13 +687,13 @@ class Selector { MultiKeywordSelector *getMultiKeywordSelector() const { return reinterpret_cast<MultiKeywordSelector *>(InfoPtr & ~ArgFlags); } - + unsigned getIdentifierInfoFlag() const { return InfoPtr & ArgFlags; } static ObjCMethodFamily getMethodFamilyImpl(Selector sel); - + static ObjCStringFormatFamily getStringFormatFamilyImpl(Selector sel); public: @@ -730,11 +730,11 @@ public: } unsigned getNumArgs() const; - + /// Retrieve the identifier at a given position in the selector. /// /// Note that the identifier pointer returned may be NULL. Clients that only - /// care about the text of the identifier string, and not the specific, + /// care about the text of the identifier string, and not the specific, /// uniqued identifier pointer, should use \c getNameForSlot(), which returns /// an empty string when the identifier pointer would be NULL. /// @@ -745,7 +745,7 @@ public: /// \returns the uniqued identifier for this slot, or NULL if this slot has /// no corresponding identifier. IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex) const; - + /// Retrieve the name at a given position in the selector. /// /// \param argIndex The index for which we want to retrieve the name. @@ -755,7 +755,7 @@ public: /// \returns the name for this slot, which may be the empty string if no /// name was supplied. StringRef getNameForSlot(unsigned argIndex) const; - + /// Derive the full selector name (e.g. "foo:bar:") and return /// it as an std::string. std::string getAsString() const; @@ -769,11 +769,11 @@ public: ObjCMethodFamily getMethodFamily() const { return getMethodFamilyImpl(*this); } - + ObjCStringFormatFamily getStringFormatFamily() const { return getStringFormatFamilyImpl(*this); } - + static Selector getEmptyMarker() { return Selector(uintptr_t(-1)); } @@ -781,7 +781,7 @@ public: static Selector getTombstoneMarker() { return Selector(uintptr_t(-2)); } - + static ObjCInstanceTypeFamily getInstTypeMethodFamily(Selector sel); }; @@ -901,7 +901,7 @@ struct PointerLikeTypeTraits<clang::Selector> { return clang::Selector(reinterpret_cast<uintptr_t>(P)); } - enum { NumLowBitsAvailable = 0 }; + enum { NumLowBitsAvailable = 0 }; }; // Provide PointerLikeTypeTraits for IdentifierInfo pointers, which diff --git a/include/clang/Basic/LLVM.h b/include/clang/Basic/LLVM.h index 8a432db911daf..3f833c62c0a8c 100644 --- a/include/clang/Basic/LLVM.h +++ b/include/clang/Basic/LLVM.h @@ -59,7 +59,7 @@ namespace clang { using llvm::dyn_cast; using llvm::dyn_cast_or_null; using llvm::cast_or_null; - + // ADT's. using llvm::ArrayRef; using llvm::MutableArrayRef; diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index f3a6292e5adea..a1396f84352fc 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -50,10 +50,10 @@ protected: class LangOptions : public LangOptionsBase { public: using Visibility = clang::Visibility; - + enum GCMode { NonGC, GCOnly, HybridGC }; enum StackProtectorMode { SSPOff, SSPOn, SSPStrong, SSPReq }; - + enum SignedOverflowBehaviorTy { // Default C standard behavior. SOB_Undefined, @@ -165,7 +165,7 @@ public: clang::ObjCRuntime ObjCRuntime; std::string ObjCConstantStringClass; - + /// The name of the handler function to be called when -ftrapv is /// specified. /// @@ -209,10 +209,10 @@ public: LangOptions(); // Define accessors/mutators for language options of enumeration type. -#define LANGOPT(Name, Bits, Default, Description) +#define LANGOPT(Name, Bits, Default, Description) #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ Type get##Name() const { return static_cast<Type>(Name); } \ - void set##Name(Type Value) { Name = static_cast<unsigned>(Value); } + void set##Name(Type Value) { Name = static_cast<unsigned>(Value); } #include "clang/Basic/LangOptions.def" /// Are we compiling a module interface (.cppm or module map)? @@ -228,7 +228,7 @@ public: bool isSignedOverflowDefined() const { return getSignedOverflowBehavior() == SOB_Defined; } - + bool isSubscriptPointerArithmetic() const { return ObjCRuntime.isSubscriptPointerArithmetic() && !ObjCSubscriptingLegacyRuntime; @@ -309,7 +309,7 @@ enum TranslationUnitKind { /// The translation unit is a module. TU_Module }; - + } // namespace clang #endif // LLVM_CLANG_BASIC_LANGOPTIONS_H diff --git a/include/clang/Basic/Linkage.h b/include/clang/Basic/Linkage.h index 94dcfd445b0b7..529cfa9f3f8d7 100644 --- a/include/clang/Basic/Linkage.h +++ b/include/clang/Basic/Linkage.h @@ -19,7 +19,7 @@ namespace clang { -/// Describes the different kinds of linkage +/// Describes the different kinds of linkage /// (C++ [basic.link], C99 6.2.2) that an entity may have. enum Linkage : unsigned char { /// No linkage, which means that the entity is unique and @@ -31,7 +31,7 @@ enum Linkage : unsigned char { /// translation units). InternalLinkage, - /// External linkage within a unique namespace. + /// External linkage within a unique namespace. /// /// From the language perspective, these entities have external /// linkage. However, since they reside in an anonymous namespace, diff --git a/include/clang/Basic/Module.h b/include/clang/Basic/Module.h index 4aebda1887c45..02a4ef610b64d 100644 --- a/include/clang/Basic/Module.h +++ b/include/clang/Basic/Module.h @@ -44,7 +44,7 @@ class raw_ostream; } // namespace llvm namespace clang { - + class LangOptions; class TargetInfo; @@ -66,7 +66,7 @@ class Module { public: /// The name of this module. std::string Name; - + /// The location of the module definition. SourceLocation DefinitionLoc; @@ -111,12 +111,12 @@ public: /// The module through which entities defined in this module will /// eventually be exposed, for use in "private" modules. std::string ExportAsModule; - + private: /// The submodules of this module, indexed by name. std::vector<Module *> SubModules; - - /// A mapping from the submodule name to the index into the + + /// A mapping from the submodule name to the index into the /// \c SubModules vector at which that submodule resides. llvm::StringMap<unsigned> SubModuleIndex; @@ -214,13 +214,13 @@ public: /// Whether this module was loaded from a module file. unsigned IsFromModuleFile : 1; - + /// Whether this is a framework module. unsigned IsFramework : 1; - + /// Whether this is an explicit submodule. unsigned IsExplicit : 1; - + /// Whether this is a "system" module (which assumes that all /// headers in it are system headers). unsigned IsSystem : 1; @@ -233,16 +233,16 @@ public: /// Whether this is an inferred submodule (module * { ... }). unsigned IsInferred : 1; - /// Whether we should infer submodules for this module based on + /// Whether we should infer submodules for this module based on /// the headers. /// /// Submodules can only be inferred for modules with an umbrella header. unsigned InferSubmodules : 1; - + /// Whether, when inferring submodules, the inferred submodules /// should be explicit. unsigned InferExplicitSubmodules : 1; - + /// Whether, when inferring submodules, the inferr submodules should /// export all modules they import (e.g., the equivalent of "export *"). unsigned InferExportWildcard : 1; @@ -280,31 +280,31 @@ public: /// The set of modules imported by this module, and on which this /// module depends. llvm::SmallSetVector<Module *, 2> Imports; - + /// Describes an exported module. /// /// The pointer is the module being re-exported, while the bit will be true /// to indicate that this is a wildcard export. using ExportDecl = llvm::PointerIntPair<Module *, 1, bool>; - + /// The set of export declarations. SmallVector<ExportDecl, 2> Exports; - + /// Describes an exported module that has not yet been resolved /// (perhaps because the module it refers to has not yet been loaded). struct UnresolvedExportDecl { /// The location of the 'export' keyword in the module map file. SourceLocation ExportLoc; - + /// The name of the module. ModuleId Id; - + /// Whether this export declaration ends in a wildcard, indicating /// that all of its submodules should be exported (rather than the named /// module itself). bool Wildcard; }; - + /// The set of export declarations that have yet to be resolved. SmallVector<UnresolvedExportDecl, 2> UnresolvedExports; @@ -320,7 +320,7 @@ public: LinkLibrary() = default; LinkLibrary(const std::string &Library, bool IsFramework) : Library(Library), IsFramework(IsFramework) {} - + /// The library to link against. /// /// This will typically be a library or framework name, but can also @@ -371,9 +371,9 @@ public: /// Construct a new module or submodule. Module(StringRef Name, SourceLocation DefinitionLoc, Module *Parent, bool IsFramework, bool IsExplicit, unsigned VisibilityID); - + ~Module(); - + /// Determine whether this module is available for use within the /// current translation unit. bool isAvailable() const { return IsAvailable; } @@ -395,7 +395,7 @@ public: /// /// \param ShadowingModule If this module is unavailable because it is /// shadowed, this parameter will be set to the shadowing module. - bool isAvailable(const LangOptions &LangOpts, + bool isAvailable(const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, UnresolvedHeaderDirective &MissingHeader, @@ -403,19 +403,19 @@ public: /// Determine whether this module is a submodule. bool isSubModule() const { return Parent != nullptr; } - + /// Determine whether this module is a submodule of the given other /// module. bool isSubModuleOf(const Module *Other) const; - + /// Determine whether this module is a part of a framework, /// either because it is a framework module or because it is a submodule /// of a framework module. bool isPartOfFramework() const { - for (const Module *Mod = this; Mod; Mod = Mod->Parent) + for (const Module *Mod = this; Mod; Mod = Mod->Parent) if (Mod->IsFramework) return true; - + return false; } @@ -456,7 +456,7 @@ public: /// Retrieve the top-level module for this (sub)module, which may /// be this module. const Module *getTopLevelModule() const; - + /// Retrieve the name of the top-level module. StringRef getTopLevelModuleName() const { return getTopLevelModule()->Name; @@ -552,7 +552,7 @@ public: using submodule_iterator = std::vector<Module *>::iterator; using submodule_const_iterator = std::vector<Module *>::const_iterator; - + submodule_iterator submodule_begin() { return SubModules.begin(); } submodule_const_iterator submodule_begin() const {return SubModules.begin();} submodule_iterator submodule_end() { return SubModules.end(); } @@ -575,9 +575,9 @@ public: return "<module-includes>"; } - /// Print the module map for this module to the given stream. + /// Print the module map for this module to the given stream. void print(raw_ostream &OS, unsigned Indent = 0) const; - + /// Dump the contents of this module to the given output stream. void dump() const; diff --git a/include/clang/Basic/ObjCRuntime.h b/include/clang/Basic/ObjCRuntime.h index d5f4f50fe36f5..c307c96433909 100644 --- a/include/clang/Basic/ObjCRuntime.h +++ b/include/clang/Basic/ObjCRuntime.h @@ -154,7 +154,7 @@ public: llvm_unreachable("bad kind"); } - /// Does this runtime natively provide the ARC entrypoints? + /// Does this runtime natively provide the ARC entrypoints? /// /// ARC cannot be directly supported on a platform that does not provide /// these entrypoints, although it may be supportable via a stub diff --git a/include/clang/Basic/OperatorKinds.h b/include/clang/Basic/OperatorKinds.h index b0064cfb4e5a7..3096f835e66b8 100644 --- a/include/clang/Basic/OperatorKinds.h +++ b/include/clang/Basic/OperatorKinds.h @@ -27,7 +27,7 @@ enum OverloadedOperatorKind : int { NUM_OVERLOADED_OPERATORS }; -/// Retrieve the spelling of the given overloaded operator, without +/// Retrieve the spelling of the given overloaded operator, without /// the preceding "operator" keyword. const char *getOperatorSpelling(OverloadedOperatorKind Operator); diff --git a/include/clang/Basic/Sanitizers.def b/include/clang/Basic/Sanitizers.def index 5a36822a63035..ae5c75fc5bbd5 100644 --- a/include/clang/Basic/Sanitizers.def +++ b/include/clang/Basic/Sanitizers.def @@ -131,9 +131,14 @@ SANITIZER_GROUP("undefined", Undefined, // -fsanitize=undefined-trap is an alias for -fsanitize=undefined. SANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined) +// ImplicitConversionSanitizer +SANITIZER("implicit-integer-truncation", ImplicitIntegerTruncation) +SANITIZER_GROUP("implicit-conversion", ImplicitConversion, + ImplicitIntegerTruncation) + SANITIZER_GROUP("integer", Integer, - SignedIntegerOverflow | UnsignedIntegerOverflow | Shift | - IntegerDivideByZero) + ImplicitIntegerTruncation | IntegerDivideByZero | Shift | + SignedIntegerOverflow | UnsignedIntegerOverflow) SANITIZER("local-bounds", LocalBounds) SANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds) diff --git a/include/clang/Basic/Sanitizers.h b/include/clang/Basic/Sanitizers.h index 469d9e2e95917..2ecbde821599d 100644 --- a/include/clang/Basic/Sanitizers.h +++ b/include/clang/Basic/Sanitizers.h @@ -84,7 +84,8 @@ SanitizerMask expandSanitizerGroups(SanitizerMask Kinds); /// Return the sanitizers which do not affect preprocessing. inline SanitizerMask getPPTransparentSanitizers() { return SanitizerKind::CFI | SanitizerKind::Integer | - SanitizerKind::Nullability | SanitizerKind::Undefined; + SanitizerKind::ImplicitConversion | SanitizerKind::Nullability | + SanitizerKind::Undefined; } } // namespace clang diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h index f174f83abf4a0..488a604a452f7 100644 --- a/include/clang/Basic/SourceLocation.h +++ b/include/clang/Basic/SourceLocation.h @@ -38,7 +38,7 @@ class SourceManager; /// source file (MemoryBuffer) along with its \#include path and \#line data. /// class FileID { - /// A mostly-opaque identifier, where 0 is "invalid", >0 is + /// A mostly-opaque identifier, where 0 is "invalid", >0 is /// this module, and <-1 is something loaded from another module. int ID = 0; @@ -60,7 +60,7 @@ private: friend class ASTWriter; friend class ASTReader; friend class SourceManager; - + static FileID get(int V) { FileID F; F.ID = V; @@ -221,7 +221,7 @@ public: return B != X.B || E != X.E; } }; - + /// Represents a character-granular source range. /// /// The underlying SourceRange can either specify the starting/ending character @@ -229,7 +229,7 @@ public: /// last token of the range (a "token range"). In the token range case, the /// size of the last token must be measured to determine the actual end of the /// range. -class CharSourceRange { +class CharSourceRange { SourceRange Range; bool IsTokenRange = false; @@ -244,7 +244,7 @@ public: static CharSourceRange getCharRange(SourceRange R) { return CharSourceRange(R, false); } - + static CharSourceRange getTokenRange(SourceLocation B, SourceLocation E) { return getTokenRange(SourceRange(B, E)); } @@ -252,21 +252,21 @@ public: static CharSourceRange getCharRange(SourceLocation B, SourceLocation E) { return getCharRange(SourceRange(B, E)); } - + /// Return true if the end of this range specifies the start of /// the last token. Return false if the end of this range specifies the last /// character in the range. bool isTokenRange() const { return IsTokenRange; } bool isCharRange() const { return !IsTokenRange; } - + SourceLocation getBegin() const { return Range.getBegin(); } SourceLocation getEnd() const { return Range.getEnd(); } SourceRange getAsRange() const { return Range; } - + void setBegin(SourceLocation b) { Range.setBegin(b); } void setEnd(SourceLocation e) { Range.setEnd(e); } void setTokenRange(bool TR) { IsTokenRange = TR; } - + bool isValid() const { return Range.isValid(); } bool isInvalid() const { return !isValid(); } }; @@ -453,7 +453,7 @@ namespace llvm { return LHS == RHS; } }; - + template <> struct isPodLike<clang::SourceLocation> { static const bool value = true; }; template <> diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index 99c36f4cdfcc8..af7dbbc13ca7b 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -155,7 +155,7 @@ namespace SrcMgr { ContentCache(const FileEntry *Ent, const FileEntry *contentEnt) : Buffer(nullptr, false), OrigEntry(Ent), ContentsEntry(contentEnt), BufferOverridden(false), IsSystemFile(false), IsTransient(false) {} - + /// The copy ctor does not allow copies where source object has either /// a non-NULL Buffer or SourceLineCache. Ownership of allocated memory /// is not transferred, so this is a logical error. @@ -1072,7 +1072,7 @@ public: unsigned FileOffset = Entry.getOffset(); return SourceLocation::getFileLoc(FileOffset); } - + /// Return the source location corresponding to the last byte of the /// specified file. SourceLocation getLocForEndOfFile(FileID FID) const { @@ -1080,7 +1080,7 @@ public: const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid); if (Invalid || !Entry.isFile()) return SourceLocation(); - + unsigned FileOffset = Entry.getOffset(); return SourceLocation::getFileLoc(FileOffset + getFileIDSize(FID)); } @@ -1403,7 +1403,7 @@ public: PresumedLoc getPresumedLoc(SourceLocation Loc, bool UseLineDirectives = true) const; - /// Returns whether the PresumedLoc for a given SourceLocation is + /// Returns whether the PresumedLoc for a given SourceLocation is /// in the main file. /// /// This computes the "presumed" location for a SourceLocation, then checks diff --git a/include/clang/Basic/SourceManagerInternals.h b/include/clang/Basic/SourceManagerInternals.h index 68873be594d4b..ddc58ffb6969d 100644 --- a/include/clang/Basic/SourceManagerInternals.h +++ b/include/clang/Basic/SourceManagerInternals.h @@ -79,7 +79,7 @@ inline bool operator<(unsigned Offset, const LineEntry &E) { /// Used to hold and unique data used to represent \#line information. class LineTableInfo { - /// Map used to assign unique IDs to filenames in \#line directives. + /// Map used to assign unique IDs to filenames in \#line directives. /// /// This allows us to unique the filenames that /// frequently reoccur and reference them with indices. FilenameIDs holds diff --git a/include/clang/Basic/Specifiers.h b/include/clang/Basic/Specifiers.h index 303b77e448053..cd8213f6cfd4b 100644 --- a/include/clang/Basic/Specifiers.h +++ b/include/clang/Basic/Specifiers.h @@ -28,14 +28,14 @@ namespace clang { TSW_long, TSW_longlong }; - + /// Specifies the signedness of a type, e.g., signed or unsigned. enum TypeSpecifierSign { TSS_unspecified, TSS_signed, TSS_unsigned }; - + enum TypeSpecifiersPipe { TSP_unspecified, TSP_pipe @@ -134,7 +134,7 @@ namespace clang { /// An Objective-C property is a logical field of an Objective-C /// object which is read and written via Objective-C method calls. OK_ObjCProperty, - + /// An Objective-C array/dictionary subscripting which reads an /// object or writes at the subscripted array/dictionary element via /// Objective-C method calls. diff --git a/include/clang/Basic/StmtNodes.td b/include/clang/Basic/StmtNodes.td index 506da07203385..1517d741cb3ce 100644 --- a/include/clang/Basic/StmtNodes.td +++ b/include/clang/Basic/StmtNodes.td @@ -187,7 +187,7 @@ def TypoExpr : DStmt<Expr>; // Microsoft Extensions. def MSPropertyRefExpr : DStmt<Expr>; def MSPropertySubscriptExpr : DStmt<Expr>; -def CXXUuidofExpr : DStmt<Expr>; +def CXXUuidofExpr : DStmt<Expr>; def SEHTryStmt : Stmt; def SEHExceptStmt : Stmt; def SEHFinallyStmt : Stmt; diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index ec5c59b239069..958b9106bc99a 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -1139,7 +1139,8 @@ public: bool isSEHTrySupported() const { return getTriple().isOSWindows() && (getTriple().getArch() == llvm::Triple::x86 || - getTriple().getArch() == llvm::Triple::x86_64); + getTriple().getArch() == llvm::Triple::x86_64 || + getTriple().getArch() == llvm::Triple::aarch64); } /// Return true if {|} are normal characters in the asm string. diff --git a/include/clang/Basic/TemplateKinds.h b/include/clang/Basic/TemplateKinds.h index 3b68cba73655b..a0bc362e7a443 100644 --- a/include/clang/Basic/TemplateKinds.h +++ b/include/clang/Basic/TemplateKinds.h @@ -31,7 +31,7 @@ enum TemplateNameKind { /// The name refers to a variable template whose specialization produces a /// variable. TNK_Var_template, - /// The name refers to a dependent template name: + /// The name refers to a dependent template name: /// \code /// template<typename MetaFun, typename T1, typename T2> struct apply2 { /// typedef typename MetaFun::template apply<T1, T2>::type type; @@ -39,7 +39,7 @@ enum TemplateNameKind { /// \endcode /// /// Here, "apply" is a dependent template name within the typename - /// specifier in the typedef. "apply" is a nested template, and + /// specifier in the typedef. "apply" is a nested template, and /// whether the template name is assumed to refer to a type template or a /// function template depends on the context in which the template /// name occurs. diff --git a/include/clang/Basic/arm_neon.td b/include/clang/Basic/arm_neon.td index d405aac106504..c35336166c39f 100644 --- a/include/clang/Basic/arm_neon.td +++ b/include/clang/Basic/arm_neon.td @@ -772,9 +772,9 @@ def RSHRN_HIGH_N : IOpInst<"vrshrn_high_n", "hmdi", "HsHiHlHUsHUiHUl", OP_NARROW_HI>; def QRSHRUN_HIGH_N : SOpInst<"vqrshrun_high_n", "hmdi", "HsHiHl", OP_NARROW_HI>; -def QSHRN_HIGH_N : SOpInst<"vqshrn_high_n", "hmdi", +def QSHRN_HIGH_N : SOpInst<"vqshrn_high_n", "hmdi", "HsHiHlHUsHUiHUl", OP_NARROW_HI>; -def QRSHRN_HIGH_N : SOpInst<"vqrshrn_high_n", "hmdi", +def QRSHRN_HIGH_N : SOpInst<"vqrshrn_high_n", "hmdi", "HsHiHlHUsHUiHUl", OP_NARROW_HI>; } @@ -927,7 +927,7 @@ def VMINV : SInst<"vminv", "sd", "csifUcUsUiQcQsQiQUcQUsQUiQfQd">; def VADDV : SInst<"vaddv", "sd", "csifUcUsUiQcQsQiQUcQUsQUiQfQdQlQUl">; def FMAXNMV : SInst<"vmaxnmv", "sd", "fQfQd">; def FMINNMV : SInst<"vminnmv", "sd", "fQfQd">; - + //////////////////////////////////////////////////////////////////////////////// // Newly added Vector Extract for f64 def VEXT_A64 : WInst<"vext", "dddi", "dQdPlQPl">; diff --git a/include/clang/Basic/arm_neon_incl.td b/include/clang/Basic/arm_neon_incl.td index 46708a52aa3a6..5f3aa6fc02213 100644 --- a/include/clang/Basic/arm_neon_incl.td +++ b/include/clang/Basic/arm_neon_incl.td @@ -9,7 +9,7 @@ // // This file defines data structures shared by arm_neon.td and arm_fp16.td. // It constains base operation classes, operations, instructions, instruction -// modifiers, etc. +// modifiers, etc. // //===----------------------------------------------------------------------===// // |