diff --git a/include/dxc/DxilContainer/DxcContainerBuilder.h b/include/dxc/DxilContainer/DxcContainerBuilder.h index e79fec18c8..f0be2447a8 100644 --- a/include/dxc/DxilContainer/DxcContainerBuilder.h +++ b/include/dxc/DxilContainer/DxcContainerBuilder.h @@ -36,7 +36,7 @@ class DxcContainerBuilder : public IDxcContainerBuilder { HRESULT STDMETHODCALLTYPE RemovePart(UINT32 fourCC) override; // Builds a container of the given container builder state HRESULT STDMETHODCALLTYPE - SerializeContainer(IDxcOperationResult **ppResult) override; + SerializeContainer(_COM_Outptr_ IDxcOperationResult **ppResult) override; DXC_MICROCOM_TM_ADDREF_RELEASE_IMPL() DXC_MICROCOM_TM_CTOR(DxcContainerBuilder) diff --git a/include/dxc/dxcapi.h b/include/dxc/dxcapi.h index 95cc56a049..341ef29bc6 100644 --- a/include/dxc/dxcapi.h +++ b/include/dxc/dxcapi.h @@ -46,7 +46,7 @@ struct IDxcIncludeHandler; /// This can be used with GetProcAddress to get the DxcCreateInstance function. typedef HRESULT(__stdcall *DxcCreateInstanceProc)(_In_ REFCLSID rclsid, _In_ REFIID riid, - _Out_ LPVOID *ppv); + _COM_Outptr_ LPVOID *ppv); /// \brief Typedef for DxcCreateInstance2 function pointer. /// @@ -54,7 +54,7 @@ typedef HRESULT(__stdcall *DxcCreateInstanceProc)(_In_ REFCLSID rclsid, typedef HRESULT(__stdcall *DxcCreateInstance2Proc)(_In_ IMalloc *pMalloc, _In_ REFCLSID rclsid, _In_ REFIID riid, - _Out_ LPVOID *ppv); + _COM_Outptr_ LPVOID *ppv); /// \brief Creates a single uninitialized object of the class associated with a /// specified CLSID. @@ -71,18 +71,17 @@ typedef HRESULT(__stdcall *DxcCreateInstance2Proc)(_In_ IMalloc *pMalloc, /// /// While this function is similar to CoCreateInstance, there is no COM /// involvement. -extern "C" DXC_API_IMPORT - HRESULT __stdcall DxcCreateInstance(_In_ REFCLSID rclsid, _In_ REFIID riid, - _Out_ LPVOID *ppv); +extern "C" DXC_API_IMPORT HRESULT __stdcall +DxcCreateInstance(_In_ REFCLSID rclsid, _In_ REFIID riid, + _COM_Outptr_ LPVOID *ppv); /// \brief Version of DxcCreateInstance that takes an IMalloc interface. /// /// This can be used to create an instance of the compiler with a custom memory /// allocator. -extern "C" DXC_API_IMPORT - HRESULT __stdcall DxcCreateInstance2(_In_ IMalloc *pMalloc, - _In_ REFCLSID rclsid, _In_ REFIID riid, - _Out_ LPVOID *ppv); +extern "C" DXC_API_IMPORT HRESULT __stdcall +DxcCreateInstance2(_In_ IMalloc *pMalloc, _In_ REFCLSID rclsid, + _In_ REFIID riid, _COM_Outptr_ LPVOID *ppv); // For convenience, equivalent definitions to CP_UTF8 and CP_UTF16. #define DXC_CP_UTF8 65001 @@ -684,8 +683,9 @@ struct IDxcUtils : public IUnknown { /// newly created reflection interface. /// /// Use this with interfaces such as ID3D12ShaderReflection. - virtual HRESULT STDMETHODCALLTYPE CreateReflection( - _In_ const DxcBuffer *pData, REFIID iid, void **ppvReflection) = 0; + virtual HRESULT STDMETHODCALLTYPE + CreateReflection(_In_ const DxcBuffer *pData, REFIID iid, + _COM_Outptr_result_maybenull_ void **ppvReflection) = 0; /// \brief Build arguments that can be passed to the Compile method. virtual HRESULT STDMETHODCALLTYPE BuildArguments( @@ -849,10 +849,10 @@ struct IDxcCompiler3 : public IUnknown { LPCWSTR *pArguments, ///< Array of pointers to arguments. _In_ UINT32 argCount, ///< Number of arguments. _In_opt_ IDxcIncludeHandler - *pIncludeHandler, ///< user-provided interface to handle include - ///< directives (optional). - _In_ REFIID riid, ///< Interface ID for the result. - _Out_ LPVOID *ppResult ///< IDxcResult: status, buffer, and errors. + *pIncludeHandler, ///< user-provided interface to handle include + ///< directives (optional). + _In_ REFIID riid, ///< Interface ID for the result. + _COM_Outptr_ LPVOID *ppResult ///< IDxcResult: status, buffer, and errors. ) = 0; /// \brief Disassemble a program. @@ -860,7 +860,7 @@ struct IDxcCompiler3 : public IUnknown { _In_ const DxcBuffer *pObject, ///< Program to disassemble: dxil container or bitcode. _In_ REFIID riid, ///< Interface ID for the result. - _Out_ LPVOID + _COM_Outptr_ LPVOID *ppResult ///< IDxcResult: status, disassembly text, and errors. ) = 0; }; @@ -933,7 +933,7 @@ struct IDxcContainerBuilder : public IUnknown { /// /// \param ppResult Pointer to variable to receive the result. virtual HRESULT STDMETHODCALLTYPE - SerializeContainer(_Out_ IDxcOperationResult **ppResult) = 0; + SerializeContainer(_COM_Outptr_ IDxcOperationResult **ppResult) = 0; }; CROSS_PLATFORM_UUIDOF(IDxcAssembler, "091f7a26-1c1f-4948-904b-e6e3a8a771d5") diff --git a/include/dxc/dxcapi.internal.h b/include/dxc/dxcapi.internal.h index 46a485206e..de3fc7d85f 100644 --- a/include/dxc/dxcapi.internal.h +++ b/include/dxc/dxcapi.internal.h @@ -337,7 +337,7 @@ CROSS_PLATFORM_UUIDOF(IDxcContainerEventsHandler, struct IDxcContainerEventsHandler : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE - OnDxilContainerBuilt(IDxcBlob *pSource, IDxcBlob **ppTarget) = 0; + OnDxilContainerBuilt(IDxcBlob *pSource, _COM_Outptr_ IDxcBlob **ppTarget) = 0; }; CROSS_PLATFORM_UUIDOF(IDxcContainerEvent, diff --git a/include/dxc/dxcdxrfallbackcompiler.h b/include/dxc/dxcdxrfallbackcompiler.h index c15906cabf..f079c9ea15 100644 --- a/include/dxc/dxcdxrfallbackcompiler.h +++ b/include/dxc/dxcdxrfallbackcompiler.h @@ -107,8 +107,7 @@ CLSID_SCOPE const GUID CLSID_DxcDxrFallbackCompiler = { 0x4b72, {0x9e, 0x10, 0x63, 0xcd, 0x97, 0xdf, 0x57, 0xf0}}; -typedef HRESULT(__stdcall *DxcCreateDxrFallbackCompilerProc)(REFCLSID rclsid, - REFIID riid, - LPVOID *ppv); +typedef HRESULT(__stdcall *DxcCreateDxrFallbackCompilerProc)( + REFCLSID rclsid, REFIID riid, _COM_Outptr_ LPVOID *ppv); #endif diff --git a/include/dxc/dxcisense.h b/include/dxc/dxcisense.h index 661de1680a..b7c45b3824 100644 --- a/include/dxc/dxcisense.h +++ b/include/dxc/dxcisense.h @@ -662,6 +662,12 @@ struct IDxcCodeCompleteResults; struct IDxcCompletionResult; struct IDxcCompletionString; +// TODO for nullonfailure: +// https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values +// > Certain interface conventions presume that output parameters are nullified +// on failure. Except for explicitly COM code, the forms in the following table +// are preferred. For COM code, use the corresponding COM forms that are listed +// in the previous section. CROSS_PLATFORM_UUIDOF(IDxcCursor, "1467b985-288d-4d2a-80c1-ef89c42c40bc") struct IDxcCursor : public IUnknown { virtual HRESULT STDMETHODCALLTYPE @@ -725,7 +731,7 @@ struct IDxcCursor : public IUnknown { /// cursor. virtual HRESULT STDMETHODCALLTYPE GetSnappedChild(_In_ IDxcSourceLocation *location, - _Outptr_result_maybenull_ IDxcCursor **pResult) = 0; + _COM_Outptr_result_maybenull_ IDxcCursor **pResult) = 0; }; CROSS_PLATFORM_UUIDOF(IDxcDiagnostic, "4f76b234-3659-4d33-99b0-3b0db994b564") @@ -736,6 +742,7 @@ struct IDxcDiagnostic : public IUnknown { virtual HRESULT STDMETHODCALLTYPE GetSeverity(_Out_ DxcDiagnosticSeverity *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE + // COM_Outptr_? GetLocation(_Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Outptr_result_maybenull_ LPSTR *pResult) = 0; @@ -744,10 +751,12 @@ struct IDxcDiagnostic : public IUnknown { virtual HRESULT STDMETHODCALLTYPE GetNumRanges(_Out_ unsigned *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetRangeAt(unsigned index, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcSourceRange **pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetNumFixIts(_Out_ unsigned *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetFixItAt(unsigned index, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcSourceRange **pReplacementRange, _Outptr_result_maybenull_ LPSTR *pText) = 0; }; @@ -766,10 +775,12 @@ struct IDxcFile : public IUnknown { CROSS_PLATFORM_UUIDOF(IDxcInclusion, "0c364d65-df44-4412-888e-4e552fc5e3d6") struct IDxcInclusion : public IUnknown { virtual HRESULT STDMETHODCALLTYPE + // COM_Outptr_? GetIncludedFile(_Outptr_result_nullonfailure_ IDxcFile **pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetStackLength(_Out_ unsigned *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetStackItem(unsigned index, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; }; @@ -790,6 +801,7 @@ struct IDxcIntelliSense : public IUnknown { GetDefaultEditingTUOptions(_Out_ DxcTranslationUnitFlags *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE CreateUnsavedFile( _In_ LPCSTR fileName, _In_ LPCSTR contents, unsigned contentLength, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcUnsavedFile **pResult) = 0; }; @@ -805,7 +817,7 @@ struct IDxcIndex : public IUnknown { int num_command_line_args, _In_count_(num_unsaved_files) IDxcUnsavedFile **unsaved_files, unsigned num_unsaved_files, DxcTranslationUnitFlags options, - _Out_ IDxcTranslationUnit **pTranslationUnit) = 0; + _COM_Outptr_ IDxcTranslationUnit **pTranslationUnit) = 0; }; CROSS_PLATFORM_UUIDOF(IDxcSourceLocation, @@ -814,7 +826,7 @@ struct IDxcSourceLocation : public IUnknown { virtual HRESULT STDMETHODCALLTYPE IsEqualTo(_In_ IDxcSourceLocation *other, _Out_ BOOL *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpellingLocation( - _Outptr_opt_ IDxcFile **pFile, _Out_opt_ unsigned *pLine, + _COM_Outptr_opt_ IDxcFile **pFile, _Out_opt_ unsigned *pLine, _Out_opt_ unsigned *pCol, _Out_opt_ unsigned *pOffset) = 0; virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL *pResult) = 0; virtual HRESULT STDMETHODCALLTYPE @@ -826,9 +838,9 @@ CROSS_PLATFORM_UUIDOF(IDxcSourceRange, "f1359b36-a53f-4e81-b514-b6b84122a13f") struct IDxcSourceRange : public IUnknown { virtual HRESULT STDMETHODCALLTYPE IsNull(_Out_ BOOL *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE - GetStart(_Out_ IDxcSourceLocation **pValue) = 0; + GetStart(_COM_Outptr IDxcSourceLocation **pValue) = 0; virtual HRESULT STDMETHODCALLTYPE - GetEnd(_Out_ IDxcSourceLocation **pValue) = 0; + GetEnd(_COM_Outptr IDxcSourceLocation **pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetOffsets(_Out_ unsigned *startOffset, _Out_ unsigned *endOffset) = 0; }; @@ -837,30 +849,34 @@ CROSS_PLATFORM_UUIDOF(IDxcToken, "7f90b9ff-a275-4932-97d8-3cfd234482a2") struct IDxcToken : public IUnknown { virtual HRESULT STDMETHODCALLTYPE GetKind(_Out_ DxcTokenKind *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE - GetLocation(_Out_ IDxcSourceLocation **pValue) = 0; + GetLocation(_COM_Outptr_ IDxcSourceLocation **pValue) = 0; virtual HRESULT STDMETHODCALLTYPE - GetExtent(_Out_ IDxcSourceRange **pValue) = 0; + GetExtent(_COM_Outptr_ IDxcSourceRange **pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpelling(_Out_ LPSTR *pValue) = 0; }; CROSS_PLATFORM_UUIDOF(IDxcTranslationUnit, "9677dee0-c0e5-46a1-8b40-3db3168be63d") struct IDxcTranslationUnit : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetCursor(_Out_ IDxcCursor **pCursor) = 0; + virtual HRESULT STDMETHODCALLTYPE + GetCursor(_COM_Outptr_ IDxcCursor **pCursor) = 0; virtual HRESULT STDMETHODCALLTYPE Tokenize(_In_ IDxcSourceRange *range, _Outptr_result_buffer_maybenull_(*pTokenCount) IDxcToken ***pTokens, _Out_ unsigned *pTokenCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetLocation(_In_ IDxcFile *file, unsigned line, unsigned column, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcSourceLocation **pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetNumDiagnostics(_Out_ unsigned *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetDiagnostic(unsigned index, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcDiagnostic **pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetFile(_In_ const char *name, + // COM_Outptr_? _Outptr_result_nullonfailure_ IDxcFile **pResult) = 0; virtual HRESULT STDMETHODCALLTYPE GetFileName(_Outptr_result_maybenull_ LPSTR *pResult) = 0; diff --git a/projects/dxilconv/include/DxbcConverter.h b/projects/dxilconv/include/DxbcConverter.h index 968beaeba7..d1cd8dcf75 100644 --- a/projects/dxilconv/include/DxbcConverter.h +++ b/projects/dxilconv/include/DxbcConverter.h @@ -17,17 +17,16 @@ #ifndef _MSC_VER extern "C" #endif - DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance(_In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID *ppv); + DXC_API_IMPORT HRESULT __stdcall + DxcCreateInstance(_In_ REFCLSID rclsid, _In_ REFIID riid, + _COM_Outptr_ LPVOID *ppv); #ifndef _MSC_VER extern "C" #endif - DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance2(_In_ IMalloc *pMalloc, - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Out_ LPVOID *ppv); + DXC_API_IMPORT HRESULT __stdcall + DxcCreateInstance2(_In_ IMalloc *pMalloc, _In_ REFCLSID rclsid, + _In_ REFIID riid, _COM_Outptr_ LPVOID *ppv); struct __declspec(uuid("5F956ED5-78D1-4B15-8247-F7187614A041")) IDxbcConverter : public IUnknown { @@ -47,7 +46,7 @@ struct __declspec(uuid("5F956ED5-78D1-4B15-8247-F7187614A041")) IDxbcConverter _In_ UINT32 NumOutputSignatureElements, _In_opt_z_ LPCVOID pPatchConstantSignature, _In_ UINT32 NumPatchConstantSignatureElements, - _In_opt_z_ LPCWSTR pExtraOptions, _Out_ IDxcBlob **ppDxilModule, + _In_opt_z_ LPCWSTR pExtraOptions, _COM_Outptr_ IDxcBlob **ppDxilModule, _Outptr_result_maybenull_z_ LPWSTR *ppDiag) = 0; }; diff --git a/projects/dxilconv/lib/DxbcConverter/DxbcConverter.cpp b/projects/dxilconv/lib/DxbcConverter/DxbcConverter.cpp index b668feb4d9..9fa8deac31 100644 --- a/projects/dxilconv/lib/DxbcConverter/DxbcConverter.cpp +++ b/projects/dxilconv/lib/DxbcConverter/DxbcConverter.cpp @@ -59,7 +59,7 @@ __override HRESULT STDMETHODCALLTYPE DxbcConverter::ConvertInDriver( UINT32 NumInputSignatureElements, LPCVOID pOutputSignature, UINT32 NumOutputSignatureElements, LPCVOID pPatchConstantSignature, UINT32 NumPatchConstantSignatureElements, LPCWSTR pExtraOptions, - IDxcBlob **ppDxilModule, LPWSTR *ppDiag) { + _COM_Outptr_ IDxcBlob **ppDxilModule, LPWSTR *ppDiag) { DxcThreadMalloc TM(m_pMalloc); LARGE_INTEGER start, end; QueryPerformanceCounter(&start); @@ -339,7 +339,7 @@ void DxbcConverter::ConvertInDriverImpl( UINT32 NumOutputSignatureElements, const D3D12DDIARG_SIGNATURE_ENTRY_0012 *pPatchConstantSignature, UINT32 NumPatchConstantSignatureElements, LPCWSTR pExtraOptions, - IDxcBlob **ppDxcBlob, LPWSTR *ppDiag) { + _COM_Outptr_ IDxcBlob **ppDxcBlob, LPWSTR *ppDiag) { IFTARG(pByteCode); IFTARG(ppDxcBlob); UINT SizeInUINTs = pByteCode[1]; diff --git a/projects/dxilconv/lib/DxbcConverter/DxbcConverterImpl.h b/projects/dxilconv/lib/DxbcConverter/DxbcConverterImpl.h index 7f19b87537..37c648d64d 100644 --- a/projects/dxilconv/lib/DxbcConverter/DxbcConverterImpl.h +++ b/projects/dxilconv/lib/DxbcConverter/DxbcConverterImpl.h @@ -309,7 +309,7 @@ class DxbcConverter : public IDxbcConverter { UINT32 NumInputSignatureElements, LPCVOID pOutputSignature, UINT32 NumOutputSignatureElements, LPCVOID pPatchConstantSignature, UINT32 NumPatchConstantSignatureElements, LPCWSTR pExtraOptions, - IDxcBlob **ppDxilModule, LPWSTR *ppDiag) override; + _COM_Outptr_ IDxcBlob **ppDxilModule, LPWSTR *ppDiag) override; protected: LLVMContext m_Ctx; @@ -534,7 +534,7 @@ class DxbcConverter : public IDxbcConverter { UINT32 NumOutputSignatureElements, const D3D12DDIARG_SIGNATURE_ENTRY_0012 *pPatchConstantSignature, UINT32 NumPatchConstantSignatureElements, LPCWSTR pExtraOptions, - IDxcBlob **ppDxcBlob, LPWSTR *ppDiag); + _COM_Outptr_ IDxcBlob **ppDxcBlob, LPWSTR *ppDiag); virtual void LogConvertResult(bool InDriver, const LARGE_INTEGER *pQPCConvertStart, diff --git a/tools/clang/tools/dxcompiler/dxcapi.cpp b/tools/clang/tools/dxcompiler/dxcapi.cpp index d4e85bc35c..13e76a1945 100644 --- a/tools/clang/tools/dxcompiler/dxcapi.cpp +++ b/tools/clang/tools/dxcompiler/dxcapi.cpp @@ -10,6 +10,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "dxc/Support/WinIncludes.h" +#include #ifdef _WIN32 #define DXC_API_IMPORT __declspec(dllexport) @@ -27,25 +28,25 @@ #include "dxc/DxilContainer/DxcContainerBuilder.h" #include -HRESULT CreateDxcCompiler(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcDiaDataSource(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcIntelliSense(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcCompilerArgs(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcUtils(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcRewriter(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcValidator(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcAssembler(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcOptimizer(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcContainerBuilder(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcLinker(REFIID riid, _Out_ LPVOID *ppv); -HRESULT CreateDxcPdbUtils(REFIID riid, _Out_ LPVOID *ppv); +HRESULT CreateDxcCompiler(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcDiaDataSource(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcIntelliSense(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcCompilerArgs(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcUtils(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcRewriter(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcValidator(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcAssembler(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcOptimizer(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcContainerBuilder(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcLinker(REFIID riid, _COM_Outptr_ LPVOID *ppv); +HRESULT CreateDxcPdbUtils(REFIID riid, _COM_Outptr_ LPVOID *ppv); namespace hlsl { void CreateDxcContainerReflection(IDxcContainerReflection **ppResult); void CreateDxcLinker(IDxcContainerReflection **ppResult); } // namespace hlsl -HRESULT CreateDxcContainerReflection(REFIID riid, _Out_ LPVOID *ppv) { +HRESULT CreateDxcContainerReflection(REFIID riid, _COM_Outptr_ LPVOID *ppv) { try { CComPtr pReflection; hlsl::CreateDxcContainerReflection(&pReflection); @@ -55,7 +56,7 @@ HRESULT CreateDxcContainerReflection(REFIID riid, _Out_ LPVOID *ppv) { } } -HRESULT CreateDxcContainerBuilder(REFIID riid, _Out_ LPVOID *ppv) { +HRESULT CreateDxcContainerBuilder(REFIID riid, _COM_Outptr_ LPVOID *ppv) { // Call dxil.dll's containerbuilder *ppv = nullptr; @@ -67,7 +68,7 @@ HRESULT CreateDxcContainerBuilder(REFIID riid, _Out_ LPVOID *ppv) { } static HRESULT ThreadMallocDxcCreateInstance(REFCLSID rclsid, REFIID riid, - _Out_ LPVOID *ppv) { + _COM_Outptr_ LPVOID *ppv) { HRESULT hr = S_OK; *ppv = nullptr; if (IsEqualCLSID(rclsid, CLSID_DxcCompiler)) { @@ -108,7 +109,7 @@ static HRESULT ThreadMallocDxcCreateInstance(REFCLSID rclsid, REFIID riid, } DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, - _Out_ LPVOID *ppv) { + _COM_Outptr_ LPVOID *ppv) { if (ppv == nullptr) { return E_POINTER; } @@ -124,7 +125,7 @@ DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance2(IMalloc *pMalloc, REFCLSID rclsid, REFIID riid, - _Out_ LPVOID *ppv) { + _COM_Outptr_ LPVOID *ppv) { if (ppv == nullptr) { return E_POINTER; } diff --git a/tools/clang/tools/dxrfallbackcompiler/dxcapi.cpp b/tools/clang/tools/dxrfallbackcompiler/dxcapi.cpp index f640ee6f47..10b6a74e74 100644 --- a/tools/clang/tools/dxrfallbackcompiler/dxcapi.cpp +++ b/tools/clang/tools/dxrfallbackcompiler/dxcapi.cpp @@ -19,10 +19,10 @@ #include "dxcetw.h" #include -HRESULT CreateDxcDxrFallbackCompiler(REFIID riid, LPVOID *ppv); +HRESULT CreateDxcDxrFallbackCompiler(REFIID riid, _COM_Outptr_ LPVOID *ppv); static HRESULT ThreadMallocDxcCreateInstance(REFCLSID rclsid, REFIID riid, - LPVOID *ppv) { + _COM_Outptr_ LPVOID *ppv) { HRESULT hr = S_OK; *ppv = nullptr; @@ -34,9 +34,9 @@ static HRESULT ThreadMallocDxcCreateInstance(REFCLSID rclsid, REFIID riid, return hr; } -DXC_API_IMPORT HRESULT __stdcall DxcCreateDxrFallbackCompiler(REFCLSID rclsid, - REFIID riid, - LPVOID *ppv) { +DXC_API_IMPORT HRESULT __stdcall +DxcCreateDxrFallbackCompiler(REFCLSID rclsid, REFIID riid, + _COM_Outptr_ LPVOID *ppv) { if (ppv == nullptr) { return E_POINTER; }