[Openmp-commits] [openmp] 8101cbf - [ompd] Fix strict aliasing violation in TargetValue::getValue() (#97739)
via Openmp-commits
openmp-commits at lists.llvm.org
Fri Jul 5 00:26:58 PDT 2024
Author: Nikita Popov
Date: 2024-07-05T09:26:54+02:00
New Revision: 8101cbff77aca47ee3c7de8e43d0546057ff2ee6
URL: https://github.com/llvm/llvm-project/commit/8101cbff77aca47ee3c7de8e43d0546057ff2ee6
DIFF: https://github.com/llvm/llvm-project/commit/8101cbff77aca47ee3c7de8e43d0546057ff2ee6.diff
LOG: [ompd] Fix strict aliasing violation in TargetValue::getValue() (#97739)
For the case where baseTypeSize does not match the size of T, read the
value into a separate char buffer first. This avoids accessing buf using
two different types.
Fixes https://github.com/llvm/llvm-project/issues/94616.
Added:
Modified:
openmp/libompd/src/TargetValue.h
Removed:
################################################################################
diff --git a/openmp/libompd/src/TargetValue.h b/openmp/libompd/src/TargetValue.h
index 87e4575885e7d..d7429f7705dfd 100644
--- a/openmp/libompd/src/TargetValue.h
+++ b/openmp/libompd/src/TargetValue.h
@@ -231,22 +231,27 @@ class TBaseValue : public TValue {
template <typename T> ompd_rc_t TBaseValue::getValue(T &buf) {
assert(sizeof(T) >= baseTypeSize);
- ompd_rc_t ret = getValue(&buf, 1);
- if (sizeof(T) > baseTypeSize) {
- switch (baseTypeSize) {
- case 1:
- buf = (T) * ((int8_t *)&buf);
- break;
- case 2:
- buf = (T) * ((int16_t *)&buf);
- break;
- case 4:
- buf = (T) * ((int32_t *)&buf);
- break;
- case 8:
- buf = (T) * ((int64_t *)&buf);
- break;
- }
+ if (sizeof(T) == baseTypeSize)
+ return getValue(&buf, 1);
+
+ char tmp[sizeof(T)];
+ ompd_rc_t ret = getValue(tmp, 1);
+ switch (baseTypeSize) {
+ case 1:
+ buf = (T) * ((int8_t *)tmp);
+ break;
+ case 2:
+ buf = (T) * ((int16_t *)tmp);
+ break;
+ case 4:
+ buf = (T) * ((int32_t *)tmp);
+ break;
+ case 8:
+ buf = (T) * ((int64_t *)tmp);
+ break;
+ default:
+ assert(0 && "Invalid baseTypeSize");
+ break;
}
return ret;
}
More information about the Openmp-commits
mailing list