From: "Abner Chang" <abner.chang@hpe.com>
To: Leif Lindholm <leif@nuviainc.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Wang, Nickle (HPS SW)" <nickle.wang@hpe.com>,
Michael D Kinney <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [PATCH] RedfishPkg/JsonLib: Fix build errors
Date: Thu, 18 Feb 2021 03:27:15 +0000 [thread overview]
Message-ID: <CS1PR8401MB1144CC7ECA7DFD9AA95712B7FF859@CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <CS1PR8401MB1144811ED28E1602035E6D7DFFB99@CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM>
Hi Leif,
Would you like to recheck the new patches I sent?
Thanks
Abner
> -----Original Message-----
> From: Chang, Abner (HPS SW/FW Technologist)
> Sent: Friday, January 29, 2021 1:11 PM
> To: Leif Lindholm <leif@nuviainc.com>
> Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW) <nickle.wang@hpe.com>;
> Michael D Kinney <michael.d.kinney@intel.com>
> Subject: RE: [edk2-devel] [PATCH] RedfishPkg/JsonLib: Fix build errors
>
> Hi Leif,
> I split this patch into 3 separate patches. Please ignore the old one.
>
> Thank
> Abner
>
> > -----Original Message-----
> > From: Chang, Abner (HPS SW/FW Technologist)
> > Sent: Thursday, January 28, 2021 10:31 PM
> > To: Leif Lindholm <leif@nuviainc.com>
> > Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW)
> <nickle.wang@hpe.com>;
> > Michael D Kinney <michael.d.kinney@intel.com>
> > Subject: RE: [edk2-devel] [PATCH] RedfishPkg/JsonLib: Fix build errors
> >
> >
> >
> > > -----Original Message-----
> > > From: Leif Lindholm [mailto:leif@nuviainc.com]
> > > Sent: Thursday, January 28, 2021 7:17 PM
> > > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>
> > > Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW)
> > <nickle.wang@hpe.com>;
> > > Michael D Kinney <michael.d.kinney@intel.com>
> > > Subject: Re: [edk2-devel] [PATCH] RedfishPkg/JsonLib: Fix build
> > > errors
> > >
> > > On Thu, Jan 28, 2021 at 04:02:54 +0000, Chang, Abner (HPS SW/FW
> > > Technologist) wrote:
> > > > > > + # C4706: assignment within conditional expression
> > > > > > #
> > > > > > # Define macro HAVE_CONFIG_H to include
> > > > > > jansson_private_config.h to
> > > > > build.
> > > > > > # Undefined _WIN32, WIN64, _MSC_VER macros
> > > > > > # On GCC, no error on the unused-function and
> > > > > > unused-but-set-
> > > variable.
> > > > > > #
> > > > > > - MSFT:*_*_X64_CC_FLAGS = /wd4204 /wd4244 /wd4090 /wd4334
> > > > > > /DHAVE_CONFIG_H=1 /U_WIN32 /UWIN64 /U_MSC_VER
> > > > > > - MSFT:*_*_IA32_CC_FLAGS = /wd4204 /wd4244 /wd4090
> > > > > /DHAVE_CONFIG_H=1
> > > > > > /U_WIN32 /UWIN64 /U_MSC_VER
> > > > > > + MSFT:*_*_X64_CC_FLAGS = /wd4204 /wd4244 /wd4090 /wd4334
> > > > > /wd4706
> > > > > > + /DHAVE_CONFIG_H=1 /U_WIN32 /UWIN64 /U_MSC_VER
> > > > > > + MSFT:*_*_IA32_CC_FLAGS = /wd4204 /wd4244 /wd4090 /wd4706
> > > > > > + /DHAVE_CONFIG_H=1 /U_WIN32 /UWIN64 /U_MSC_VER
> > > > >
> > > > > Urgh, please don't do this.
> > > > > C4706 is what gives you a warning for accidentally assigning
> > > > > instead of comparing. It's our last defence against the
> > > > > jeopardy-comparing hordes that think
> > > > > if (NULL == Ptr)
> > > > > is a sensible way of writing C.
> > > > >
> > > > > What is the actual problem being encountered?
> > > >
> > > > That is because we use the macro defined in open source header
> > > > file, RedfishPkg/Library/JsonLib/jansson/src/jansson.h
> > > >
> > > > #define json_object_foreach(object, key, value) \
> > > > for (key = json_object_iter_key(json_object_iter(object));
> > \
> > > > key && (value =
> > > json_object_iter_value(json_object_key_to_iter(key))); \
> > > > key = json_object_iter_key( \
> > > > json_object_iter_next(object,
> > > > json_object_key_to_iter(key))))
> > >
> > > Yay, "optimisation" by using preprocessor...
> > >
> > > Apart from how this ought to be a helper function:
> > > - No parentheses around parameters in macro.
> > > - Setting "value" at each iteration through the loop condition.
> > > - Slinging parentheses like it's a lisp convention.
> > > - And it would be worse if they treated the parameters properly.
> > >
> > > If we ignore the other issues, the below should be functionally
> > > equivalent and build on VS without disabling the warning:
> > >
> > > for (key = json_object_iter_key(json_object_iter(object));
> \
> > > key; \
> > > key = json_object_iter_key( \
> > > json_object_iter_next(object, json_object_key_to_iter(key))))
> > > { \
> > > value = json_object_iter_value(json_object_key_to_iter(key));
> > > \
> > > if (!value) \
> > > break; \
> > > }
> > >
> > > Could you try to convince upstream to take the patch?
> > Sure, I just sent an email to community, hope we can get the feedback
> soon.
> >
> > Leif, that may takes time to have this patch to be in upstream (if
> > they agree with it)... I have another PR which is not get merged yet.
> > This will block our works on edk2, thus I would like to just add build
> > option to suppress this build error. The build option is only for
> > JsonLib though. Do you agree with this?
> >
> > Thanks
> > Abner
> >
> > >
> > > > > Beyond that, this will probably be an issue for all
> > > > > architectures, so why add explicit (identical) workarounds for
> IA32/X64?
> > > >
> > > > I didn't catch this build error on GCC. You may know why?
> > >
> > > Ugh.
> > > This is because (for whatever reason), both clang and GCC suppress
> > > this warning if you add parentheses around the assignment. VS does not.
> > >
> > > /
> > > Leif
next prev parent reply other threads:[~2021-02-18 3:27 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-25 4:31 [PATCH] RedfishPkg/JsonLib: Fix build errors Abner Chang
2021-01-26 11:30 ` [edk2-devel] " Leif Lindholm
2021-01-28 4:02 ` Abner Chang
2021-01-28 11:17 ` Leif Lindholm
2021-01-28 14:30 ` Abner Chang
2021-01-29 5:11 ` Abner Chang
2021-02-08 5:05 ` Abner Chang
[not found] ` <CS1PR8401MB1144811ED28E1602035E6D7DFFB99@CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM>
2021-02-18 3:27 ` Abner Chang [this message]
2021-02-18 3:29 ` Nickle Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CS1PR8401MB1144CC7ECA7DFD9AA95712B7FF859@CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox