summaryrefslogtreecommitdiff
path: root/include/libcamera/controls.h
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-03-07 22:02:35 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-03-08 19:35:24 +0200
commit4de31ccc9ef47e7b16330d226d071d5d006faa6d (patch)
tree44d90a288dffdf92b3678f76c6e1e8b148e443fb /include/libcamera/controls.h
parent291d4878bba51603f875257d5b6b3c99b62b6685 (diff)
libcamera: controls: Fix strict aliasing violation
gcc 8.3.0 for ARM complains about strict aliasing violations: ../../src/libcamera/controls.cpp: In member function ‘void libcamera::ControlValue::release()’: ../../src/libcamera/controls.cpp:111:13: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] delete[] *reinterpret_cast<char **>(&storage_); Fix it and simplify the code at the same time. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'include/libcamera/controls.h')
-rw-r--r--include/libcamera/controls.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 4767e2d3..0e111ab7 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -160,7 +160,10 @@ private:
ControlType type_ : 8;
bool isArray_ : 1;
std::size_t numElements_ : 16;
- uint64_t storage_;
+ union {
+ uint64_t value_;
+ void *storage_;
+ };
void release();
void set(ControlType type, bool isArray, const void *data,