Skip to content

[SYCL] Fix bugs in PI Mock #6852

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions sycl/unittests/helpers/PiMock.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,18 +104,21 @@ class PiMock {
// Create new mock plugin platform and plugin handles
// Note: Mock plugin will be generated if it has not been yet.
MPlatformImpl = GetMockPlatformImpl();
const detail::plugin &OriginalPiPlugin = MPlatformImpl->getPlugin();
// Copy the PiPlugin, thus untying our to-be mock platform from other
// platforms within the context. Reset our platform to use the new plugin.
auto NewPluginPtr = std::make_shared<detail::plugin>(
OriginalPiPlugin.getPiPluginPtr(), OriginalPiPlugin.getBackend(),
OriginalPiPlugin.getLibraryHandle());
std::shared_ptr<detail::plugin> NewPluginPtr;
{
const detail::plugin &OriginalPiPlugin = MPlatformImpl->getPlugin();
// Copy the PiPlugin, thus untying our to-be mock platform from other
// platforms within the context. Reset our platform to use the new plugin.
NewPluginPtr = std::make_shared<detail::plugin>(
OriginalPiPlugin.getPiPluginPtr(), OriginalPiPlugin.getBackend(),
OriginalPiPlugin.getLibraryHandle());
// Save a copy of the platform resource
OrigFuncTable = OriginalPiPlugin.getPiPlugin().PiFunctionTable;
}
MPlatformImpl->setPlugin(NewPluginPtr);
// Extract the new PiPlugin instance by a non-const pointer,
// explicitly allowing modification
MPiPluginMockPtr = &NewPluginPtr->getPiPlugin();
// Save a copy of the platform resource
OrigFuncTable = OriginalPiPlugin.getPiPlugin().PiFunctionTable;
}

PiMock(PiMock &&Other) {
Expand Down
8 changes: 5 additions & 3 deletions sycl/unittests/helpers/PiMockPlugin.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,13 @@ inline pi_result mock_piPlatformGetInfo(pi_platform platform,
return PI_SUCCESS;
}
default: {
constexpr const char *FallbackValue = "str";
constexpr size_t FallbackValueSize = std::strlen(FallbackValue) + 1;
if (param_value_size_ret)
*param_value_size_ret = 3;
*param_value_size_ret = FallbackValueSize;

if (param_value && param_value_size >= 3)
*static_cast<const char **>(param_value) = "str";
if (param_value && param_value_size >= FallbackValueSize)
std::memcpy(param_value, FallbackValue, FallbackValueSize);

return PI_SUCCESS;
}
Expand Down