public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Sami Mujawar <Sami.Mujawar@arm.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Alexei Fedorov <Alexei.Fedorov@arm.com>,
	Ard Biesheuvel <Ard.Biesheuvel@arm.com>,
	"leif@nuviainc.com" <leif@nuviainc.com>,
	Matteo Carlini <Matteo.Carlini@arm.com>,
	Laura Moretta <Laura.Moretta@arm.com>, nd <nd@arm.com>
Subject: Re: [PATCH v2 2/2] ArmPlatformPkg: Fix comparison of constants warning
Date: Wed, 20 May 2020 13:37:20 +0200	[thread overview]
Message-ID: <18f8bfe7-14d2-3d3d-0e8a-265c3f7a7915@redhat.com> (raw)
In-Reply-To: <DB7PR08MB30972D4B1E9194A0DB4FE7B884B60@DB7PR08MB3097.eurprd08.prod.outlook.com>

[Top-posting is difficult to read on technical lists; it's better to 
reply inline; maybe GitHub will fix this problem after all]

On 5/20/20 1:25 PM, Sami Mujawar wrote:
> Hi Philippe,
> 
> I had put a descriptive message to make people aware that the pragma effects the next line of code only. But I agree we can abbreviate it as per your suggestion.

Usually #pragma should be avoided at all cost, but is acceptable as last 
resort aid. Since you use it in a C source file (and not an header) it 
is a bit implicit that the scope is local. Sometime too verbose 
documentation is harmful. Anyway I'm diverging.

> However, there is an ongoing discussion about an alternative (by which we could avoid the pragma) on another thread at https://edk2.groups.io/g/devel/message/59948.

Good, this approach is preferable.

Regards,

Phil.

> 
> Regards,
> 
> Sami Mujawar
> 
> -----Original Message-----
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> Sent: 20 May 2020 11:47 AM
> To: Sami Mujawar <Sami.Mujawar@arm.com>; devel@edk2.groups.io
> Cc: Alexei Fedorov <Alexei.Fedorov@arm.com>; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; leif@nuviainc.com; Matteo Carlini <Matteo.Carlini@arm.com>; Laura Moretta <Laura.Moretta@arm.com>; nd <nd@arm.com>
> Subject: Re: [PATCH v2 2/2] ArmPlatformPkg: Fix comparison of constants warning
> 
> Hi Sami,
> 
> On 5/18/20 2:46 PM, Sami Mujawar wrote:
>> The VS2017 compiler reports 'warning C6326: potential comparison of a
>> constant with another constant' when a fixed PCD value is compared
>> with a constant value.
>>
>> The faulting code is as marked by '-->' below:
>>
>> --> if (FixedPcdGet32 (PL011UartInteger) != 0) {
>>         Integer = FixedPcdGet32 (PL011UartInteger);
>>         Fractional = FixedPcdGet32 (PL011UartFractional);
>>       } else {
>>       ...
>>
>> The macro FixedPcdGet32 (PL011UartInteger) evaluates to a macro
>> _PCD_VALUE_PL011UartInteger that is defined by the build system to
>> represent the UART Integer value. Therefore, the VS2017 compiler
>> reports the above warning.
>>
>> In this case the warning reported by the Visual Studio compiler does
>> not evaluate to an issue. However, it can be useful to detect
>> potential issues in other scenarios.
>> Other compilers may either be incapable of detecting and reporting
>> comparison with constant warnings or may be good at reducing false
>> positives. So, it is definitely useful to keep this warning enabled,
>> and disabling it case by case is a suitable option.
>>
>> Therefore, disable this warning for Visual studio compilers using the
>> pragma suppress directive that:
>> 'Pushes the current state of the pragma on the stack, disables the
>> specified warning for the next line, and then pops the warning stack
>> so that the pragma state is reset.'
>>
>> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
>> ---
>>
>> Notes:
>>       v2:
>>        - Update patch to selectively suppress comparison of         [SAMI]
>>          constant warning and submit as a separate series.
>>       
>>       v1:
>>        - Fix comparison of constant warning reported by VS2017      [SAMI]
>>        - Various feedbacks can be seen at:
>>          https://edk2.groups.io/g/devel/topic/32999801#46278
>>
>>    ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c | 10 +++++++++-
>>    1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
>> b/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
>> index
>> 2d3c279cce49304959953ec4a34b50e09a7d0045..3c915e1e8de22a0b0b4cc46d495a
>> 5a6cbc784013 100644
>> --- a/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
>> +++ b/ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.c
>> @@ -2,7 +2,7 @@
>>      Serial I/O Port library functions with no library
>> constructor/destructor
>>    
>>      Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
>> -  Copyright (c) 2011 - 2019, ARM Ltd. All rights reserved.<BR>
>> +  Copyright (c) 2011 - 2020, ARM Ltd. All rights reserved.<BR>
>>    
>>      SPDX-License-Identifier: BSD-2-Clause-Patent
>>    
>> @@ -174,6 +174,14 @@ PL011UartInitializePort (
>>      //
>>    
>>      // If PL011 Integer value has been defined then always ignore the
>> BAUD rate
>> +#if defined(_MSC_EXTENSIONS)
>> +  // Suppress 'warning C6326' reported by Visual Studio compiler
>> +using
>> +  // the suppress pragma directive that: 'Pushes the current state of
>> +  // the pragma on the stack, disables the specified warning for the
>> +  // next line, and then pops the warning stack so that the pragma
>> +state
>> +  // is reset.'
> 
> We don't need to document how #pragma works each time we use it in the source code...
> 
> What about a simpler comment, referring the particular Visual Studio
> version:
> 
> //
> 
> // Disable 'potential comparison of a constant with another constant'
> // warning with VS2017 compiler static code analysis option is enabled //
> 
>> +#pragma warning(suppress:6326)
>> +#endif
>>      if (FixedPcdGet32 (PL011UartInteger) != 0) {
>>        Integer = FixedPcdGet32 (PL011UartInteger);
>>        Fractional = FixedPcdGet32 (PL011UartFractional);
>>
> 


      reply	other threads:[~2020-05-20 11:37 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-18 12:46 [PATCH v3 0/2] Fix warnings reported by VS2017 compiler Sami Mujawar
2020-05-18 12:46 ` [PATCH v1-resend 1/2] ArmPlatformPkg: Fix UART divisor warning Sami Mujawar
2020-07-02 11:50   ` [edk2-devel] " Sami Mujawar
2020-05-18 12:46 ` [PATCH v2 2/2] ArmPlatformPkg: Fix comparison of constants warning Sami Mujawar
2020-05-18 17:51   ` Leif Lindholm
2020-05-20 10:47   ` Philippe Mathieu-Daudé
2020-05-20 11:25     ` Sami Mujawar
2020-05-20 11:37       ` Philippe Mathieu-Daudé [this message]

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=18f8bfe7-14d2-3d3d-0e8a-265c3f7a7915@redhat.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