diff --git a/clang/include/clang/AST/Attr.h b/clang/include/clang/AST/Attr.h index 651f98adc7330..6366d6e8837ef 100644 --- a/clang/include/clang/AST/Attr.h +++ b/clang/include/clang/AST/Attr.h @@ -374,8 +374,7 @@ struct ParsedTargetAttr { inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, const Attr *At) { - DB.AddTaggedVal(reinterpret_cast(At), - DiagnosticsEngine::ak_attr); + DB.AddTaggedVal(reinterpret_cast(At), DiagnosticsEngine::ak_attr); return DB; } } // end namespace clang diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index d124ed282bb15..b46499203b0bc 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -4589,7 +4589,7 @@ class EmptyDecl : public Decl { /// into a diagnostic with <<. inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &PD, const NamedDecl *ND) { - PD.AddTaggedVal(reinterpret_cast(ND), + PD.AddTaggedVal(reinterpret_cast(ND), DiagnosticsEngine::ak_nameddecl); return PD; } diff --git a/clang/include/clang/AST/NestedNameSpecifier.h b/clang/include/clang/AST/NestedNameSpecifier.h index 8bc3e25c0f4b3..eb01780598a7f 100644 --- a/clang/include/clang/AST/NestedNameSpecifier.h +++ b/clang/include/clang/AST/NestedNameSpecifier.h @@ -521,7 +521,7 @@ class NestedNameSpecifierLocBuilder { /// NestedNameSpecifiers into a diagnostic with <<. inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, NestedNameSpecifier *NNS) { - DB.AddTaggedVal(reinterpret_cast(NNS), + DB.AddTaggedVal(reinterpret_cast(NNS), DiagnosticsEngine::ak_nestednamespec); return DB; } diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index b8d72f904d0b6..f8c1fe91085f0 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -7146,7 +7146,7 @@ inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &PD, /// into a diagnostic with <<. inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &PD, QualType T) { - PD.AddTaggedVal(reinterpret_cast(T.getAsOpaquePtr()), + PD.AddTaggedVal(reinterpret_cast(T.getAsOpaquePtr()), DiagnosticsEngine::ak_qualtype); return PD; } diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index efb725845d3e8..e5577e74fa639 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -164,9 +164,9 @@ struct DiagnosticStorage { /// The values for the various substitution positions. /// /// This is used when the argument is not an std::string. The specific value - /// is mangled into an intptr_t and the interpretation depends on exactly + /// is mangled into an uint64_t and the interpretation depends on exactly /// what sort of argument kind it is. - intptr_t DiagArgumentsVal[MaxArguments]; + uint64_t DiagArgumentsVal[MaxArguments]; /// The values for the various substitution positions that have /// string arguments. @@ -1179,7 +1179,7 @@ class StreamingDiagnostic { DiagStorage = nullptr; } - void AddTaggedVal(intptr_t V, DiagnosticsEngine::ArgumentKind Kind) const { + void AddTaggedVal(uint64_t V, DiagnosticsEngine::ArgumentKind Kind) const { if (!DiagStorage) DiagStorage = getStorage(); @@ -1402,6 +1402,12 @@ inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, return DB; } +inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, + int64_t I) { + DB.AddTaggedVal(I, DiagnosticsEngine::ak_sint); + return DB; +} + // We use enable_if here to prevent that this overload is selected for // pointers or other arguments that are implicitly convertible to bool. template @@ -1418,6 +1424,12 @@ inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, return DB; } +inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, + uint64_t I) { + DB.AddTaggedVal(I, DiagnosticsEngine::ak_uint); + return DB; +} + inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, tok::TokenKind I) { DB.AddTaggedVal(static_cast(I), DiagnosticsEngine::ak_tokenkind); @@ -1580,18 +1592,18 @@ class Diagnostic { /// Return the specified signed integer argument. /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_sint - int getArgSInt(unsigned Idx) const { + int64_t getArgSInt(unsigned Idx) const { assert(getArgKind(Idx) == DiagnosticsEngine::ak_sint && "invalid argument accessor!"); - return (int)DiagObj->DiagStorage.DiagArgumentsVal[Idx]; + return (int64_t)DiagObj->DiagStorage.DiagArgumentsVal[Idx]; } /// Return the specified unsigned integer argument. /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_uint - unsigned getArgUInt(unsigned Idx) const { + uint64_t getArgUInt(unsigned Idx) const { assert(getArgKind(Idx) == DiagnosticsEngine::ak_uint && "invalid argument accessor!"); - return (unsigned)DiagObj->DiagStorage.DiagArgumentsVal[Idx]; + return DiagObj->DiagStorage.DiagArgumentsVal[Idx]; } /// Return the specified IdentifierInfo argument. @@ -1605,7 +1617,7 @@ class Diagnostic { /// Return the specified non-string argument in an opaque form. /// \pre getArgKind(Idx) != DiagnosticsEngine::ak_std_string - intptr_t getRawArg(unsigned Idx) const { + uint64_t getRawArg(unsigned Idx) const { assert(getArgKind(Idx) != DiagnosticsEngine::ak_std_string && "invalid argument accessor!"); return DiagObj->DiagStorage.DiagArgumentsVal[Idx]; diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h index 64a078866ca52..52b2c0d963fce 100644 --- a/clang/include/clang/Sema/ParsedAttr.h +++ b/clang/include/clang/Sema/ParsedAttr.h @@ -1119,14 +1119,14 @@ enum AttributeDeclKind { inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, const ParsedAttr &At) { - DB.AddTaggedVal(reinterpret_cast(At.getAttrName()), + DB.AddTaggedVal(reinterpret_cast(At.getAttrName()), DiagnosticsEngine::ak_identifierinfo); return DB; } inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, const ParsedAttr *At) { - DB.AddTaggedVal(reinterpret_cast(At->getAttrName()), + DB.AddTaggedVal(reinterpret_cast(At->getAttrName()), DiagnosticsEngine::ak_identifierinfo); return DB; } @@ -1141,7 +1141,7 @@ template ::value, int> = 0> inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, const ACI &CI) { - DB.AddTaggedVal(reinterpret_cast(CI.getAttrName()), + DB.AddTaggedVal(reinterpret_cast(CI.getAttrName()), DiagnosticsEngine::ak_identifierinfo); return DB; } @@ -1151,7 +1151,7 @@ template ::value, int> = 0> inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, const ACI* CI) { - DB.AddTaggedVal(reinterpret_cast(CI->getAttrName()), + DB.AddTaggedVal(reinterpret_cast(CI->getAttrName()), DiagnosticsEngine::ak_identifierinfo); return DB; } diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index 1b779afa0f310..9b7ad96b949f1 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -932,7 +932,7 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd, } // ---- INTEGERS ---- case DiagnosticsEngine::ak_sint: { - int Val = getArgSInt(ArgNo); + int64_t Val = getArgSInt(ArgNo); if (ModifierIs(Modifier, ModifierLen, "select")) { HandleSelectModifier(*this, (unsigned)Val, Argument, ArgumentLen, @@ -951,7 +951,7 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd, break; } case DiagnosticsEngine::ak_uint: { - unsigned Val = getArgUInt(ArgNo); + uint64_t Val = getArgUInt(ArgNo); if (ModifierIs(Modifier, ModifierLen, "select")) { HandleSelectModifier(*this, Val, Argument, ArgumentLen, OutStr);