1From 63ab887be90c7fe37d537ea75e60eb95d6d87d3f Mon Sep 17 00:00:00 2001
2From: Peter Seiderer <ps.report@gmx.net>
3Date: Sun, 5 Mar 2023 22:08:13 +0100
4Subject: [PATCH] uqmi: avoid gcc-12.x false error reporting (storing the
5 address of local variable 'complete' in '*req.complete')
6
7Avoid gcc-12.x false error reporting (req->complete is later reset to NULL
8in case of use of local complete):
9
10  dev.c:217:23: error: storing the address of local variable 'complete' in '*req.complete' [-Werror=dangling-pointer=]
11    217 |         req->complete = &complete;
12        |         ~~~~~~~~~~~~~~^~~~~~~~~~~
13
14Signed-off-by: Peter Seiderer <ps.report@gmx.net>
15[Upstream: http://lists.openwrt.org/pipermail/openwrt-devel/2023-March/040667.html]
16Signed-off-by: Peter Seiderer <ps.report@gmx.net>
17---
18Changes v1 -> v2:
19  - apply pragma ignored only for gcc >= 12.x (as the warning
20    '-Wdangling-pointer' was introduced with gcc-12.x)
21---
22 dev.c | 12 ++++++++++++
23 1 file changed, 12 insertions(+)
24
25diff --git a/dev.c b/dev.c
26index bd10207..dbd42d4 100644
27--- a/dev.c
28+++ b/dev.c
29@@ -203,6 +203,15 @@ void qmi_request_cancel(struct qmi_dev *qmi, struct qmi_request *req)
30 	__qmi_request_complete(qmi, req, NULL);
31 }
32
33+/* avoid gcc-12.x false error reporting:
34+ *   dev.c:217:23: error: storing the address of local variable ‘complete’ in ‘*req.complete’ [-Werror=dangling-pointer=]
35+ *     217 |         req->complete = &complete;
36+ *         |         ~~~~~~~~~~~~~~^~~~~~~~~~~
37+ */
38+#if __GNUC__ >= 12
39+#pragma GCC diagnostic push
40+#pragma GCC diagnostic ignored "-Wdangling-pointer"
41+#endif
42 int qmi_request_wait(struct qmi_dev *qmi, struct qmi_request *req)
43 {
44 	bool complete = false;
45@@ -231,6 +240,9 @@ int qmi_request_wait(struct qmi_dev *qmi, struct qmi_request *req)
46
47 	return req->ret;
48 }
49+#if __GNUC__ >= 12
50+#pragma GCC diagnostic pop
51+#endif
52
53 struct qmi_connect_request {
54 	struct qmi_request req;
55--
562.39.2
57
58