[PATCH] cdrom: add parentheses around macro arguments

Joey Pabalinas posted 1 patch 4 days, 7 hours ago
drivers/cdrom/cdrom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] cdrom: add parentheses around macro arguments
Posted by Joey Pabalinas 4 days, 7 hours ago
Signed-off-by: Joey Pabalinas <joeypabalinas@gmail.com>
---
 drivers/cdrom/cdrom.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 31ba1f8c1f7865dc99..462ee74621da6f32da 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -408,11 +408,11 @@ static int cdrom_get_disc_info(struct cdrom_device_info *cdi,
  * hack to have the capability flags defined const, while we can still
  * change it here without gcc complaining at every line.
  */
 #define ENSURE(cdo, call, bits)					\
 do {								\
-	if (cdo->call == NULL)					\
+	if ((cdo)->(call) == NULL)				\
 		WARN_ON_ONCE((cdo)->capability & (bits));	\
 } while (0)
 
 /*
  * the first prototypes used 0x2c as the page code for the mrw mode page,
-- 
Cheers,
Joey Pabalinas

Re: [PATCH] cdrom: add parentheses around macro arguments
Posted by Al Viro 3 days, 19 hours ago
On Fri, Sep 05, 2025 at 07:59:40AM -1000, Joey Pabalinas wrote:
> Signed-off-by: Joey Pabalinas <joeypabalinas@gmail.com>
> ---
>  drivers/cdrom/cdrom.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
> index 31ba1f8c1f7865dc99..462ee74621da6f32da 100644
> --- a/drivers/cdrom/cdrom.c
> +++ b/drivers/cdrom/cdrom.c
> @@ -408,11 +408,11 @@ static int cdrom_get_disc_info(struct cdrom_device_info *cdi,
>   * hack to have the capability flags defined const, while we can still
>   * change it here without gcc complaining at every line.
>   */
>  #define ENSURE(cdo, call, bits)					\
>  do {								\
> -	if (cdo->call == NULL)					\
> +	if ((cdo)->(call) == NULL)				\

You do realize that the right-hand argument of . and -> is *not* an
expression, right?  How would anything other than identifier work, anyway?
Note, BTW, that such identifier would not work as a standalone expression -
its meaning depends upon the structure of union you are dealing with...

General advise, from painful personal experience: before posting a patch,
make sure that you have
	* got enough caffeine in your bloodstream
	* looked through the patch
	* tried to compile the results
The order of the last two may vary, but the first one really needs to go
before anything else.
Re: [PATCH] cdrom: add parentheses around macro arguments
Posted by Phillip Potter 5 hours ago
On Sat, Sep 06, 2025 at 07:28:19AM +0100, Al Viro wrote:
> On Fri, Sep 05, 2025 at 07:59:40AM -1000, Joey Pabalinas wrote:
> > Signed-off-by: Joey Pabalinas <joeypabalinas@gmail.com>
> > ---
> >  drivers/cdrom/cdrom.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
> > index 31ba1f8c1f7865dc99..462ee74621da6f32da 100644
> > --- a/drivers/cdrom/cdrom.c
> > +++ b/drivers/cdrom/cdrom.c
> > @@ -408,11 +408,11 @@ static int cdrom_get_disc_info(struct cdrom_device_info *cdi,
> >   * hack to have the capability flags defined const, while we can still
> >   * change it here without gcc complaining at every line.
> >   */
> >  #define ENSURE(cdo, call, bits)					\
> >  do {								\
> > -	if (cdo->call == NULL)					\
> > +	if ((cdo)->(call) == NULL)				\
> 
> You do realize that the right-hand argument of . and -> is *not* an
> expression, right?  How would anything other than identifier work, anyway?
> Note, BTW, that such identifier would not work as a standalone expression -
> its meaning depends upon the structure of union you are dealing with...
> 
> General advise, from painful personal experience: before posting a patch,
> make sure that you have
> 	* got enough caffeine in your bloodstream
> 	* looked through the patch
> 	* tried to compile the results
> The order of the last two may vary, but the first one really needs to go
> before anything else.

Hi Joey,

Thank you for sending the patch. I must add however (in addition to Al's
advice) that there doesn't seem to be a proper commit description
either - just a subject line and a Signed-off-by tag. All commits should
individually contain a description too. I appreciate the effort though,
and I encourage you to make further submissions should you choose to do
so. All the best.

Regards,
Phil
Uniform CDROM Maintainer
Re: [PATCH] cdrom: add parentheses around macro arguments
Posted by kernel test robot 3 days, 19 hours ago
Hi Joey,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.17-rc4 next-20250905]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Joey-Pabalinas/cdrom-add-parentheses-around-macro-arguments/20250906-020047
base:   linus/master
patch link:    https://lore.kernel.org/r/13378f5c9cafc29425b6e420cad8b513f4a9f1e1.1757095005.git.joeypabalinas%40gmail.com
patch subject: [PATCH] cdrom: add parentheses around macro arguments
config: sh-randconfig-r071-20250906 (https://download.01.org/0day-ci/archive/20250906/202509061338.yRYn1te8-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250906/202509061338.yRYn1te8-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509061338.yRYn1te8-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/cdrom/cdrom.c: In function 'register_cdrom':
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:604:2: note: in expansion of macro 'ENSURE'
     604 |  ENSURE(cdo, drive_status, CDC_DRIVE_STATUS);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:607:2: note: in expansion of macro 'ENSURE'
     607 |  ENSURE(cdo, tray_move, CDC_CLOSE_TRAY | CDC_OPEN_TRAY);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:608:2: note: in expansion of macro 'ENSURE'
     608 |  ENSURE(cdo, lock_door, CDC_LOCK);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:609:2: note: in expansion of macro 'ENSURE'
     609 |  ENSURE(cdo, select_speed, CDC_SELECT_SPEED);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:610:2: note: in expansion of macro 'ENSURE'
     610 |  ENSURE(cdo, get_last_session, CDC_MULTI_SESSION);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:611:2: note: in expansion of macro 'ENSURE'
     611 |  ENSURE(cdo, get_mcn, CDC_MCN);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:612:2: note: in expansion of macro 'ENSURE'
     612 |  ENSURE(cdo, reset, CDC_RESET);
         |  ^~~~~~
>> drivers/cdrom/cdrom.c:413:13: error: expected identifier before '(' token
     413 |  if ((cdo)->(call) == NULL)    \
         |             ^
   drivers/cdrom/cdrom.c:613:2: note: in expansion of macro 'ENSURE'
     613 |  ENSURE(cdo, generic_packet, CDC_GENERIC_PACKET);
         |  ^~~~~~


vim +413 drivers/cdrom/cdrom.c

   405	
   406	/* This macro makes sure we don't have to check on cdrom_device_ops
   407	 * existence in the run-time routines below. Change_capability is a
   408	 * hack to have the capability flags defined const, while we can still
   409	 * change it here without gcc complaining at every line.
   410	 */
   411	#define ENSURE(cdo, call, bits)					\
   412	do {								\
 > 413		if ((cdo)->(call) == NULL)				\
   414			WARN_ON_ONCE((cdo)->capability & (bits));	\
   415	} while (0)
   416	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki