-
Notifications
You must be signed in to change notification settings - Fork 12.5k
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
[Libomptarget][NFC] Remove use of VLA in the AMDGPU plugin #69761
Conversation
@llvm/pr-subscribers-backend-amdgpu Author: Joseph Huber (jhuber6) ChangesSummary: Full diff: https://github.com/llvm/llvm-project/pull/69761.diff 1 Files Affected:
diff --git a/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp b/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
index 66a25e29d016276..626ea827cc95ab2 100644
--- a/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
+++ b/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
@@ -1568,7 +1568,7 @@ struct AMDGPUStreamManagerTy final
hsa_agent_t Agent;
/// The maximum number of queues.
- int MaxNumQueues;
+ uint32_t MaxNumQueues;
/// The size of created queues.
int QueueSize;
@@ -2869,15 +2869,14 @@ struct AMDGPUPluginTy final : public GenericPluginTy {
if (Status != HSA_STATUS_SUCCESS)
return Status;
- // TODO: This is not allowed by the standard.
- char ISAName[Length];
- Status = hsa_isa_get_info_alt(ISA, HSA_ISA_INFO_NAME, ISAName);
+ llvm::SmallVector<char> ISAName(Length);
+ Status = hsa_isa_get_info_alt(ISA, HSA_ISA_INFO_NAME, ISAName.begin());
if (Status != HSA_STATUS_SUCCESS)
return Status;
- llvm::StringRef TripleTarget(ISAName);
+ llvm::StringRef TripleTarget(ISAName.begin(), Length);
if (TripleTarget.consume_front("amdgcn-amd-amdhsa"))
- Target = TripleTarget.ltrim('-').str();
+ Target = TripleTarget.ltrim('-').rtrim('\0').str();
return HSA_STATUS_SUCCESS;
});
if (Err)
|
// TODO: This is not allowed by the standard. | ||
char ISAName[Length]; | ||
Status = hsa_isa_get_info_alt(ISA, HSA_ISA_INFO_NAME, ISAName); | ||
llvm::SmallVector<char> ISAName(Length); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need Length + 1
here? I know it's not there even before.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, this is something I wasn't sure about. The documentation states that the length does not include the null terminator, but printing the Length suggested that it's not true. Given that I'm not trusting the documentation I instead wrote it in such a way that it will work regardless by trimming any null terminators at the end if they exist.
Summary: We should not rely on a VLA in C++ for the handling of this string. The size is a true runtime value so we cannot rely on constexpr handling. We simply use a small vector, whose default size is most likely large enough to handle whatever size gets output within the stack, but is safe in cases where it is not.
Summary:
We should not rely on a VLA in C++ for the handling of this string. The
size is a true runtime value so we cannot rely on constexpr handling. We
simply use a small vector, whose default size is most likely large
enough to handle whatever size gets output within the stack, but is safe
in cases where it is not.