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 <l...@nuviainc.com>
> Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW) <nickle.w...@hpe.com>;
> Michael D Kinney <michael.d.kin...@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 <l...@nuviainc.com>
> > Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW)
> <nickle.w...@hpe.com>;
> > Michael D Kinney <michael.d.kin...@intel.com>
> > Subject: RE: [edk2-devel] [PATCH] RedfishPkg/JsonLib: Fix build errors
> >
> >
> >
> > > -----Original Message-----
> > > From: Leif Lindholm [mailto:l...@nuviainc.com]
> > > Sent: Thursday, January 28, 2021 7:17 PM
> > > To: Chang, Abner (HPS SW/FW Technologist) <abner.ch...@hpe.com>
> > > Cc: devel@edk2.groups.io; Wang, Nickle (HPS SW)
> > <nickle.w...@hpe.com>;
> > > Michael D Kinney <michael.d.kin...@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


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#71767): https://edk2.groups.io/g/devel/message/71767
Mute This Topic: https://groups.io/mt/80097450/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to