Besides the GetBestLanguage() , there are several other lib functions have the 
same problem which are listed in attachment 
https://bugzilla.tianocore.org/attachment.cgi?id=97 of the Bug410. These 
functions can also cause the build fails with CLANG38 in my side with clang 
version 4.0 or clang 5.0.

I'm OK to enable the -Wvarargs again if we think these lib ABI updates are 
acceptable.

Steven Shi
Intel\SSG\STO\UEFI Firmware

Tel: +86 021-61166522
iNet: 821-6522

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Marvin H?user
> Sent: Monday, September 25, 2017 8:30 PM
> To: edk2-devel@lists.01.org
> Cc: Laszlo Ersek <ler...@redhat.com>; Gao, Liming <liming....@intel.com>
> Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in
> CLANG38 toolchain
> 
> Hey Liming and Laszlo,
> 
> Thanks for your answers!
> 
> I rather thought of this (I didn't check whether Language1 should be CONST,
> but doesn't matter for now):
> 
> CHAR8 *
> EFIAPI
> GetBestLanguage (
>   IN CONST CHAR8  *SupportedLanguages,
>   IN BOOLEAN          Iso639Language,
>   IN CHAR8               *Language1,
>   ...
>   );
> 
> This would be compatible with all existing code because the VA list solely
> consists of CHAR8 pointers.
> The only difference would be that one cannot pass just NULL after
> Iso639Language, but this scenario makes no sense anyway.
> One would just use Langauge1 on the first iteration and, as part of a do-
> while-loop, assign the VA args via VA_ARG().
> 
> Best regards,
> Marvin.
> 
> > -----Original Message-----
> > From: Gao, Liming [mailto:liming....@intel.com]
> > Sent: Monday, September 25, 2017 11:58 AM
> > To: Laszlo Ersek <ler...@redhat.com>; Marvin H?user
> > <marvin.haeu...@outlook.com>; edk2-devel@lists.01.org
> > Subject: RE: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40
> in
> > CLANG38 toolchain
> >
> > Laszlo:
> >   This is a better way. The bug
> > https://bugzilla.tianocore.org/show_bug.cgi?id=410 only lists
> > GetBestLanguage() API. I am not sure whether they are similar cases in
> edk2.
> > If have, we had better fix them together.
> >
> > Thanks
> > Liming
> > >-----Original Message-----
> > >From: Laszlo Ersek [mailto:ler...@redhat.com]
> > >Sent: Monday, September 25, 2017 4:13 PM
> > >To: Gao, Liming <liming....@intel.com>; Marvin Häuser
> > ><marvin.haeu...@outlook.com>; edk2-devel@lists.01.org
> > >Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and
> LLVM40
> > >in
> > >CLANG38 toolchain
> > >
> > >On 09/25/17 06:59, Gao, Liming wrote:
> > >> Marvin:
> > >>   My concern is that the fix is an incompatible change. It requires
> > >> to modify
> > >library API. In fact, this is an undefined behavior. But, current
> > >compiler (VS, GCC and Clang) makes it work.  So, I prefer to keep the
> > >code as-is, and disable this warning first. If you find any real issue,
> > >we can return back and figure out the solution.
> > >
> > >I think we can draw a parallel here to GetVariable() and GetVariable2().
> > >GetVariable() is now unavailable if
> > DISABLE_NEW_DEPRECATED_INTERFACES
> > >is defined.
> > >
> > >I think the right solution would be to
> > >- introduce GetBestLanguage2(),
> > >- migrate all the current call sites to GetBestLanguage2() -- I counted
> > >  18, and the updates should be easy --,
> > >- and then make GetVariable() conditional on
> > >  not-DISABLE_NEW_DEPRECATED_INTERFACES.
> > >
> > >
> > >CHAR8 *
> > >EFIAPI
> > >GetBestLanguage2 (
> > >  IN CONST CHAR8  *SupportedLanguages,
> > >  IN INTN         Iso639Language,
> > >  ...
> > >  );
> > >
> > >I don't feel strongly about this question, I just think technically
> > >this would be best. CLANG warnings are valuable.
> > >
> > >Thanks
> > >Laszlo
> > >
> > >>> -----Original Message-----
> > >>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
> > >>> Of Marvin H?user
> > >>> Sent: Friday, September 22, 2017 11:53 PM
> > >>> To: edk2-devel@lists.01.org
> > >>> Cc: Gao, Liming <liming....@intel.com>
> > >>> Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and
> > >>> LLVM40
> > >in
> > >>> CLANG38 toolchain
> > >>>
> > >>> Hey,
> > >>>
> > >>> I just noticed this patch as it recently has been pushed. I found
> > >>> this has
> > >been a
> > >>> reaction to https://bugzilla.tianocore.org/show_bug.cgi?id=410
> > >>> Though as Clang correctly detected, this is Undefined Behavior per
> > >>> the C specification, so why was the warning hidden?
> > >>> In context of the issue in UefiLib, providing the first element of
> > >>> the VA list
> > >as a
> > >>> prototyped argument, would have solved the issue without UB.
> > >>>
> > >>> Do you wish such a patch?
> > >>>
> > >>> Thanks,
> > >>> Marvin.
> > >>>
> > >>>> -----Original Message-----
> > >>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On
> Behalf
> > >>>> Of Gao, Liming
> > >>>> Sent: Monday, August 28, 2017 9:19 AM
> > >>>> To: Shi, Steven <steven....@intel.com>; edk2-devel@lists.01.org
> > >>>> Subject: Re: [edk2] [PATCH] BaseTools/Conf: Support LLVM39 and
> > >LLVM40
> > >>> in
> > >>>> CLANG38 toolchain
> > >>>>
> > >>>> Reviewed-by: Liming Gao <liming....@intel.com>
> > >>>>
> > >>>>> -----Original Message-----
> > >>>>> From: Shi, Steven
> > >>>>> Sent: Wednesday, August 23, 2017 3:01 PM
> > >>>>> To: edk2-devel@lists.01.org; Gao, Liming <liming....@intel.com>
> > >>>>> Cc: Zhu, Yonghong <yonghong....@intel.com>; Shi, Steven
> > >>>>> <steven....@intel.com>
> > >>>>> Subject: [PATCH] BaseTools/Conf: Support LLVM39 and LLVM40 in
> > >>> CLANG38
> > >>>>> toolchain
> > >>>>>
> > >>>>> From: "Shi, Steven" <steven....@intel.com>
> > >>>>>
> > >>>>> Add LLVM39 and LLVM40 support in CLANG38 toolchain
> > >>>>>
> > >>>>> Contributed-under: TianoCore Contribution Agreement 1.0
> > >>>>> Signed-off-by: Steven Shi <steven....@intel.com>
> > >>>>> ---
> > >>>>> BaseTools/Conf/tools_def.template | 5 +++--
> > >>>>> 1 file changed, 3 insertions(+), 2 deletions(-)
> > >>>>>
> > >>>>> diff --git a/BaseTools/Conf/tools_def.template
> > >>>>> b/BaseTools/Conf/tools_def.template
> > >>>>> index 1fa3ca3..2f83341 100755
> > >>>>> --- a/BaseTools/Conf/tools_def.template
> > >>>>> +++ b/BaseTools/Conf/tools_def.template
> > >>>>> @@ -380,7 +380,8 @@ DEFINE SOURCERY_CYGWIN_TOOLS =
> > >>>> /cygdrive/c/Program
> > >>>>> Files/CodeSourcery/Sourcery G
> > >>>>> #                               Intel(r) ACPI Compiler from
> > >>>>> #                               https://acpica.org/downloads
> > >>>>> #   CLANG38  -Linux-  Requires:
> > >>>>> -#                             Clang v3.8 or later, LLVMgold plugin 
> > >>>>> and GNU
> binutils
> > >2.26
> > >>>>> targeting x86_64-linux-gnu
> > >>>>> +#                             Clang v3.8, LLVMgold plugin and GNU 
> > >>>>> binutils
> 2.26
> > >>>> targeting
> > >>>>> x86_64-linux-gnu
> > >>>>> +#                             Clang v3.9 or later, LLVMgold plugin 
> > >>>>> and GNU
> binutils
> > >2.28
> > >>>>> targeting x86_64-linux-gnu
> > >>>>> #                        Optional:
> > >>>>> #                             Required to build platforms or ACPI 
> > >>>>> tables:
> > >>>>> #                               Intel(r) ACPI Compiler from
> > >>>>> @@ -5512,7 +5513,7 @@ DEFINE CLANG38_X64_PREFIX           =
> > >>>>> ENV(CLANG38_BIN)
> > >>>>> DEFINE CLANG38_IA32_TARGET          = -target i686-pc-linux-gnu
> > >>>>> DEFINE CLANG38_X64_TARGET           = -target x86_64-pc-linux-gnu
> > >>>>>
> > >>>>> -DEFINE CLANG38_ALL_CC_FLAGS         = DEF(GCC44_ALL_CC_FLAGS)
> > -
> > >>> Wno-
> > >>>>> empty-body -fno-stack-protector -mms-bitfields -Wno-address -
> > Wno-
> > >>> shift-
> > >>>>> negative-value -Wno-parentheses-equality -Wno-unknown-pragmas
> > -
> > >>>> Wno-
> > >>>>> tautological-constant-out-of-range-compare
> > >>>>> -Wno-incompatible-library- redeclaration
> > >>>>> -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -
> > >>>> msoft-
> > >>>>> float -mno-implicit-float  -ftrap-
> > >>>>> function=undefined_behavior_has_been_optimized_away_by_clang
> > -
> > >>>>> funsigned-char -fno-ms-extensions -Wno-null-dereference -Wno-
> > >>>>> tautological-compare -Wno-unknown-warning-option
> > >>>>> +DEFINE CLANG38_ALL_CC_FLAGS         =
> DEF(GCC44_ALL_CC_FLAGS)
> > -
> > >>>> Wno-
> > >>>>> empty-body -fno-stack-protector -mms-bitfields -Wno-address -
> > Wno-
> > >>> shift-
> > >>>>> negative-value -Wno-parentheses-equality -Wno-unknown-pragmas
> > -
> > >>>> Wno-
> > >>>>> tautological-constant-out-of-range-compare
> > >>>>> -Wno-incompatible-library- redeclaration
> > >>>>> -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -
> > >>>> msoft-
> > >>>>> float -mno-implicit-float  -ftrap-
> > >>>>> function=undefined_behavior_has_been_optimized_away_by_clang
> > -
> > >>>>> funsigned-char -fno-ms-extensions -Wno-null-dereference -Wno-
> > >>>>> tautological-compare -Wno-unknown-warning-option -Wno-varargs
> > >>>>>
> > >>>>> ###########################
> > >>>>> # CLANG38 IA32 definitions
> > >>>>> --
> > >>>>> 2.7.4
> > >>>>
> > >>>> _______________________________________________
> > >>>> edk2-devel mailing list
> > >>>> edk2-devel@lists.01.org
> > >>>> https://lists.01.org/mailman/listinfo/edk2-devel
> > >>> _______________________________________________
> > >>> edk2-devel mailing list
> > >>> edk2-devel@lists.01.org
> > >>> https://lists.01.org/mailman/listinfo/edk2-devel
> > >> _______________________________________________
> > >> edk2-devel mailing list
> > >> edk2-devel@lists.01.org
> > >> https://lists.01.org/mailman/listinfo/edk2-devel
> > >>
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to