public inbox for linux-bcache@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-05 15:54 David Howells
  2018-09-05 15:55 ` [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
       [not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
  0 siblings, 2 replies; 11+ messages in thread
From: David Howells @ 2018-09-05 15:54 UTC (permalink / raw)
  To: linux-api-u79uwXL29TY76Z2rM5mHXA,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA
  Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
	Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	dhowells-H+wXaHxf7aLQT0dZR+AlfA, Masahiro Yamada,
	keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
	Michal Marek, Takashi Iwai, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	Rob Clark <robdclar>


Here's a set of patches that inserts a step into the build process to make
sure that the UAPI headers can all be built together with C++ (if the
compiler being used supports C++).  All but the final patch perform fixups,
including:

 (1) Fix member names that conflict with C++ reserved words by providing
     alternates that can be used anywhere.  An anonymous union is used so
     that that the conflicting name is still available outside of C++.

 (2) Fix the use of flexible arrays in structs that get embedded (which is
     illegal in C++).

 (3) Remove the use of internal kernel structs in UAPI structures.

 (4) Fix symbol collisions.

 (5) Replace usage of u32 and co. with __u32 and co.

 (6) Fix use of sparsely initialised arrays (which g++ doesn't implement).

 (7) Remove some use of PAGE_SIZE since this isn't valid outside of the
     kernel.

And lastly:

 (8) Compile all of the UAPI headers (with a few exceptions) together as
     C++ to catch new errors occurring as part of the regular build
     process.

The patches can also be found here:

	http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=uapi-check

Thanks,
David
---
David Howells (11):
      UAPI: drm: Fix use of C++ keywords as structural members
      UAPI: keys: Fix use of C++ keywords as structural members
      UAPI: virtio_net: Fix use of C++ keywords as structural members
      UAPI: bcache: Fix use of embedded flexible array
      UAPI: coda: Don't use internal kernel structs in UAPI
      UAPI: netfilter: Fix symbol collision issues
      UAPI: nilfs2: Fix use of undefined byteswapping functions
      UAPI: sound: Fix use of u32 and co. in UAPI headers
      UAPI: ndctl: Fix g++-unsupported initialisation in headers
      UAPI: ndctl: Remove use of PAGE_SIZE
      UAPI: Check headers build for C++


 Makefile                                          |    1 
 include/linux/ndctl.h                             |   22 ++++
 include/uapi/drm/i810_drm.h                       |    7 +
 include/uapi/drm/msm_drm.h                        |    7 +
 include/uapi/linux/bcache.h                       |    2 
 include/uapi/linux/coda_psdev.h                   |    4 +
 include/uapi/linux/keyctl.h                       |    7 +
 include/uapi/linux/ndctl.h                        |   20 ++-
 include/uapi/linux/netfilter/nfnetlink_cthelper.h |    2 
 include/uapi/linux/netfilter_ipv4/ipt_ECN.h       |    9 --
 include/uapi/linux/nilfs2_ondisk.h                |   21 ++--
 include/uapi/linux/virtio_net.h                   |    7 +
 include/uapi/sound/skl-tplg-interface.h           |  106 +++++++++---------
 scripts/headers-c++.sh                            |  124 +++++++++++++++++++++
 14 files changed, 255 insertions(+), 84 deletions(-)
 create mode 100644 include/linux/ndctl.h
 create mode 100755 scripts/headers-c++.sh

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
  2018-09-05 15:54 [RFC] UAPI: Check headers by compiling all together as C++ David Howells
@ 2018-09-05 15:55 ` David Howells
  2018-10-02 14:52   ` Jan Engelhardt
       [not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
  1 sibling, 1 reply; 11+ messages in thread
From: David Howells @ 2018-09-05 15:55 UTC (permalink / raw)
  To: linux-api, linux-kbuild
  Cc: Coly Li, Kent Overstreet, linux-bcache, linux-kernel, dhowells

The bkey struct defined by bcache is embedded in the jset struct.  However,
this is illegal in C++ as there's a "flexible array" at the end of the
struct.  Change this to be a 0-length struct instead.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Coly Li <colyli@suse.de>
cc: Kent Overstreet <kent.overstreet@gmail.com>
cc: linux-bcache@vger.kernel.org
---

 include/uapi/linux/bcache.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h
index 5d4f58e059fd..11863e903bff 100644
--- a/include/uapi/linux/bcache.h
+++ b/include/uapi/linux/bcache.h
@@ -23,7 +23,7 @@ static inline void SET_##name(type *k, __u64 v)			\
 struct bkey {
 	__u64	high;
 	__u64	low;
-	__u64	ptr[];
+	__u64	ptr[0];
 };
 
 #define KEY_FIELD(name, field, offset, size)				\

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [RFC] UAPI: Check headers by compiling all together as C++
       [not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
@ 2018-09-05 16:55   ` Greg KH
       [not found]     ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 11+ messages in thread
From: Greg KH @ 2018-09-05 16:55 UTC (permalink / raw)
  To: David Howells
  Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
	Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
	Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai,
	linux-kernel@

On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> 
> Here's a set of patches that inserts a step into the build process to make
> sure that the UAPI headers can all be built together with C++ (if the
> compiler being used supports C++).  All but the final patch perform fixups,
> including:

Wait, why do we care?  What has recently changed to start to directly
import kernel uapi files into C++ code?

And if userspace wants to do this, can't they do the C namespace trick
themselves when they do the import?  That must be how they are doing it
today, right?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC] UAPI: Check headers by compiling all together as C++
       [not found]     ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
@ 2018-09-05 17:33       ` Yann Droneaud
  2018-09-05 17:42         ` Michael S. Tsirkin
       [not found]         ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
  2018-09-05 19:22       ` Jan Engelhardt
  1 sibling, 2 replies; 11+ messages in thread
From: Yann Droneaud @ 2018-09-05 17:33 UTC (permalink / raw)
  To: Greg KH, David Howells
  Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
	Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
	Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai,
	linux-kernel@

Hi,

Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> > 
> > Here's a set of patches that inserts a step into the build process to make
> > sure that the UAPI headers can all be built together with C++ (if the
> > compiler being used supports C++).  All but the final patch perform fixups,
> > including:
> 
> Wait, why do we care?  What has recently changed to start to directly
> import kernel uapi files into C++ code?
> 
> And if userspace wants to do this, can't they do the C namespace trick
> themselves when they do the import?  That must be how they are doing it
> today, right?
> 

They can't.


Adding extern "C" { } doesn't magically make "class" a non keyword.
Even if it was the case, writing C++ code using whatever->class would
probably broke because class is a keyword in C++.

-- 
Yann Droneaud
OPTEYA


_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC] UAPI: Check headers by compiling all together as C++
  2018-09-05 17:33       ` Yann Droneaud
@ 2018-09-05 17:42         ` Michael S. Tsirkin
       [not found]         ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
  1 sibling, 0 replies; 11+ messages in thread
From: Michael S. Tsirkin @ 2018-09-05 17:42 UTC (permalink / raw)
  To: Yann Droneaud
  Cc: moderated for non-subscribers, David Airlie, Greg KH, Jason Wang,
	Mat Martineau, dri-devel, virtualization, David Howells,
	Masahiro Yamada, keyrings, Ryusuke Konishi, linux-nilfs,
	linux-nvdimm, codalist, coda, coreteam, Kent Overstreet,
	linux-kbuild, linux-arm-msm, Coly Li, linux-bcache, Dan Williams,
	Jaroslav Kysela, Jan Harkes, Michal Marek

On Wed, Sep 05, 2018 at 07:33:38PM +0200, Yann Droneaud wrote:
> Hi,
> 
> Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> > On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> > > 
> > > Here's a set of patches that inserts a step into the build process to make
> > > sure that the UAPI headers can all be built together with C++ (if the
> > > compiler being used supports C++).  All but the final patch perform fixups,
> > > including:
> > 
> > Wait, why do we care?  What has recently changed to start to directly
> > import kernel uapi files into C++ code?
> > 
> > And if userspace wants to do this, can't they do the C namespace trick
> > themselves when they do the import?  That must be how they are doing it
> > today, right?
> > 
> 
> They can't.
> 
> 
> Adding extern "C" { } doesn't magically make "class" a non keyword.
> Even if it was the case, writing C++ code using whatever->class would
> probably broke because class is a keyword in C++.

I think it's a bug in the language TBH.

> -- 
> Yann Droneaud
> OPTEYA
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC] UAPI: Check headers by compiling all together as C++
       [not found]     ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
  2018-09-05 17:33       ` Yann Droneaud
@ 2018-09-05 19:22       ` Jan Engelhardt
  1 sibling, 0 replies; 11+ messages in thread
From: Jan Engelhardt @ 2018-09-05 19:22 UTC (permalink / raw)
  To: Greg KH
  Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
	Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	David Howells, Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA,
	Ryusuke Konishi, linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
	Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takash

On Wednesday 2018-09-05 18:55, Greg KH wrote:

>On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
>> 
>> Here's a set of patches that inserts a step into the build process to make
>> sure that the UAPI headers can all be built together with C++ (if the
>> compiler being used supports C++).  All but the final patch perform fixups,
>> including:
>
>Wait, why do we care?  What has recently changed to start to directly
>import kernel uapi files into C++ code?

With C++11, C++ has become a much nicer language to use (for userspace, anyway).

>And if userspace wants to do this, can't they do the C namespace trick
>themselves when they do the import?

The only trick is to use an extra C source file and extensively wrap things.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC] UAPI: Check headers by compiling all together as C++
       [not found]         ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
@ 2018-09-06  7:12           ` Yann Droneaud
  0 siblings, 0 replies; 11+ messages in thread
From: Yann Droneaud @ 2018-09-06  7:12 UTC (permalink / raw)
  To: Greg KH, David Howells
  Cc: moderated for non-subscribers, Michael S. Tsirkin, David Airlie,
	Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	Masahiro Yamada, keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela, Jan Harkes,
	Michal Marek, linux-api-u79uwXL29TY76Z2rM5mHXA, Takashi Iwai,
	linux-kernel@

Le mercredi 05 septembre 2018 à 19:33 +0200, Yann Droneaud a écrit :
> Le mercredi 05 septembre 2018 à 18:55 +0200, Greg KH a écrit :
> > On Wed, Sep 05, 2018 at 04:54:27PM +0100, David Howells wrote:
> > > 
> > > Here's a set of patches that inserts a step into the build
> > > process to make
> > > sure that the UAPI headers can all be built together with C++ (if
> > > the
> > > compiler being used supports C++).  All but the final patch
> > > perform fixups,
> > > including:
> > 
> > Wait, why do we care?  What has recently changed to start to
> > directly
> > import kernel uapi files into C++ code?
> > 
> > And if userspace wants to do this, can't they do the C namespace
> > trick
> > themselves when they do the import?  That must be how they are
> > doing it
> > today, right?
> > 
> 
> They can't.
> 
> 
> Adding extern "C" { } doesn't magically make "class" a non keyword.
> Even if it was the case, writing C++ code using whatever->class would
> probably broke because class is a keyword in C++.
> 

For the record, libX11 has to handle the kink pf issue with C++
keyword:


https://gitlab.freedesktop.org/xorg/lib/libx11/blob/733f64bfeb311c1d040b2f751bfdef9c9d0f89ef/include/X11/Xlib.h#L227

typedef struct {
	XExtData *ext_data;	/* hook for extension to hang data */
	VisualID visualid;	/* visual id of this visual */
#if defined(__cplusplus) || defined(c_plusplus)
	int c_class;		/* C++ class of screen (monochrome, etc.) */
#else
	int class;		/* class of screen (monochrome, etc.) */
#endif
	unsigned long red_mask, green_mask, blue_mask;	/* mask values */
	int bits_per_rgb;	/* log base 2 of distinct color values */
	int map_entries;	/* color map entries */
} Visual;


Regards.

-- 
Yann Droneaud
OPTEYA


_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC] UAPI: Check headers by compiling all together as C++
@ 2018-09-06  9:18 David Howells
  0 siblings, 0 replies; 11+ messages in thread
From: David Howells @ 2018-09-06  9:18 UTC (permalink / raw)
  To: linux-api-u79uwXL29TY76Z2rM5mHXA,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA
  Cc: Michael S. Tsirkin, David Airlie, Jason Wang, Mat Martineau,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	dhowells-H+wXaHxf7aLQT0dZR+AlfA, Masahiro Yamada,
	keyrings-u79uwXL29TY76Z2rM5mHXA, Ryusuke Konishi, Yann Droneaud,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw,
	codalist-/uMB558Y47wP4a1z8dhFYw, coda-ETDLCGt7PQU3uPMLIKxrzw,
	coreteam-Cap9r6Oaw4JrovVCs/uTlw, Kent Overstreet,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA, Coly Li,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA, Dan Williams, Jan Harkes,
	Michal Marek, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rob Clark,
	netfilter-devel-u79uwXL29TY76Z2rM5mHXA


Here's a set of patches that inserts a step into the build process to make
sure that the UAPI headers can all be built together with C++ (if the
compiler being used supports C++).

Note that it's based on a commit from the sound tree to fix usage of u32
and co..

Most of the patches perform fixups, including:

 (1) Fix member names that conflict with C++ reserved words by providing
     alternates that can be used anywhere.  An anonymous union is used so
     that that the conflicting name is still available outside of C++.

 (2) Fix the use of flexible arrays in structs that get embedded (which is
     illegal in C++).

 (3) Remove the use of internal kernel structs in UAPI structures.

 (4) Fix symbol collisions.

 (5) Fix use of sparsely initialised arrays (which g++ doesn't implement).

 (6) Remove some use of PAGE_SIZE since this isn't valid outside of the
     kernel.

There's also:

 (7) Move the coda_psdev.h header file to fs/coda/.

And lastly:

 (8) Compile all of the UAPI headers (with a few exceptions) together as
     C++ to catch new errors occurring as part of the regular build
     process.

Changes for v2:

 - Merge commit from sound tree to fix u32 usage issues
 - Use a switch to fix sparse array initialisation
 - Simplify nilfs2 by performing bitwise ops in LE space not CPU space
 - Handle conflicting fix to use of 'private' in keyctl.h
 - Move kernel internal coda bits to coda internal headers
 - Move coda_psdev.h header to fs/coda/.

The patches can also be found here:

	http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=uapi-check

Thanks,
David
---
David Howells (11):
      UAPI: drm: Fix use of C++ keywords as structural members
      UAPI: keys: Fix use of C++ keywords as structural members
      UAPI: virtio_net: Fix use of C++ keywords as structural members
      UAPI: bcache: Fix use of embedded flexible array
      UAPI: coda: Move kernel internals out of public view
      coda: Move internal defs out of include/linux/
      UAPI: netfilter: Fix symbol collision issues
      UAPI: nilfs2: Fix use of undefined byteswapping functions
      UAPI: ndctl: Fix g++-unsupported initialisation in headers
      UAPI: ndctl: Remove use of PAGE_SIZE
      UAPI: Check headers build for C++


 Makefile                                          |    1 
 fs/coda/cache.c                                   |    2 
 fs/coda/cnode.c                                   |    2 
 fs/coda/coda_linux.c                              |    2 
 fs/coda/coda_psdev.h                              |   88 +++++++++++++++
 fs/coda/dir.c                                     |    2 
 fs/coda/file.c                                    |    3 -
 fs/coda/inode.c                                   |    2 
 fs/coda/pioctl.c                                  |    3 -
 fs/coda/psdev.c                                   |    3 -
 fs/coda/symlink.c                                 |    3 -
 fs/coda/upcall.c                                  |    2 
 include/linux/coda_psdev.h                        |   72 ------------
 include/linux/ndctl.h                             |   22 ++++
 include/uapi/drm/i810_drm.h                       |    7 +
 include/uapi/drm/msm_drm.h                        |    7 +
 include/uapi/linux/bcache.h                       |    2 
 include/uapi/linux/coda_psdev.h                   |   18 ---
 include/uapi/linux/keyctl.h                       |    7 +
 include/uapi/linux/ndctl.h                        |   52 ++++-----
 include/uapi/linux/netfilter/nfnetlink_cthelper.h |    2 
 include/uapi/linux/netfilter_ipv4/ipt_ECN.h       |    9 --
 include/uapi/linux/nilfs2_ondisk.h                |   28 ++---
 include/uapi/linux/virtio_net.h                   |    7 +
 scripts/headers-c++.sh                            |  124 +++++++++++++++++++++
 25 files changed, 304 insertions(+), 166 deletions(-)
 create mode 100644 fs/coda/coda_psdev.h
 delete mode 100644 include/linux/coda_psdev.h
 create mode 100644 include/linux/ndctl.h
 create mode 100755 scripts/headers-c++.sh

_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
  2018-09-05 15:55 ` [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
@ 2018-10-02 14:52   ` Jan Engelhardt
  2018-10-09 15:41     ` David Howells
  0 siblings, 1 reply; 11+ messages in thread
From: Jan Engelhardt @ 2018-10-02 14:52 UTC (permalink / raw)
  To: David Howells
  Cc: linux-api, linux-kbuild, Coly Li, Kent Overstreet, linux-bcache,
	linux-kernel


On Wed, 05 Sep 2018 16:55:03 +0100, David Howells wrote:
>
>The bkey struct defined by bcache is embedded in the jset struct. However,
>this is illegal in C++ as there's a "flexible array" at the end of the struct.
>Change this to be a 0-length struct instead.
>
>-	__u64	ptr[];
>+	__u64	ptr[0];

As per the C++ standard, it is _also_ illegal to declare an array of size zero.

"""it [the array size expression] shall be a converted constant expression of
type std::size_t and its value shall be greater than zero."""
—http://eel.is/c++draft/dcl.array

That makes both "__u64 ptr[]" and "__u64 ptr[0]" *implementation-specific
extensions*.


3rd party tooling (concerns both C and C++):

Coverity Scan (IIRC) treats "__u64 ptr[0]" as an array of "definitely-zero"
size. Writing to any element will outright flag an out-of-bounds violation.
That is sensible, since only "ptr[]" was standardized.


Conclusion:

So please, do never use __u64 ptr[0].

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
  2018-10-02 14:52   ` Jan Engelhardt
@ 2018-10-09 15:41     ` David Howells
  2018-10-09 16:54       ` Jan Engelhardt
  0 siblings, 1 reply; 11+ messages in thread
From: David Howells @ 2018-10-09 15:41 UTC (permalink / raw)
  To: Jan Engelhardt
  Cc: dhowells, linux-api, linux-kbuild, Coly Li, Kent Overstreet,
	linux-bcache, linux-kernel

Jan Engelhardt <jengelh@inai.de> wrote:

> """it [the array size expression] shall be a converted constant expression of
> type std::size_t and its value shall be greater than zero."""
> —http://eel.is/c++draft/dcl.array

Interesting.  You're not actually quoting the full sentence:

	If the constant-expression is present, it shall be a converted
	constant expression of type std​::​size_­t and its value shall be
	greater than zero.

This suggests that:

	__u64 ptr[]

is actually valid since:

	D1 [ constant-expressionopt ] attribute-specifier-seqopt

suggests that the part between the brackets is optional.

David

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array
  2018-10-09 15:41     ` David Howells
@ 2018-10-09 16:54       ` Jan Engelhardt
  0 siblings, 0 replies; 11+ messages in thread
From: Jan Engelhardt @ 2018-10-09 16:54 UTC (permalink / raw)
  To: David Howells
  Cc: linux-api, linux-kbuild, Coly Li, Kent Overstreet, linux-bcache,
	linux-kernel

On Tuesday 2018-10-09 17:41, David Howells wrote:

>Jan Engelhardt <jengelh@inai.de> wrote:
>
>> """it [the array size expression] shall be a converted constant expression of
>> type std::size_t and its value shall be greater than zero."""
>> —http://eel.is/c++draft/dcl.array
>
>Interesting.  You're not actually quoting the full sentence:
>
>	If the constant-expression is present, it shall be a converted
>	constant expression of type std​::​size_­t and its value shall be
>	greater than zero.
>
>This suggests that:
>
>	__u64 ptr[]
>
>is actually valid

I think that kind of validity only goes for this kind of standalone 
decl:

	extern int myints[];

but not for []-inside-struct.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-10-09 16:54 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-05 15:54 [RFC] UAPI: Check headers by compiling all together as C++ David Howells
2018-09-05 15:55 ` [PATCH 04/11] UAPI: bcache: Fix use of embedded flexible array David Howells
2018-10-02 14:52   ` Jan Engelhardt
2018-10-09 15:41     ` David Howells
2018-10-09 16:54       ` Jan Engelhardt
     [not found] ` <153616286704.23468.584491117180383924.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2018-09-05 16:55   ` [RFC] UAPI: Check headers by compiling all together as C++ Greg KH
     [not found]     ` <20180905165552.GB25206-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2018-09-05 17:33       ` Yann Droneaud
2018-09-05 17:42         ` Michael S. Tsirkin
     [not found]         ` <a1efae8d26cc5b73b180e9521d6b62590c55aa86.camel-RlY5vtjFyJ3QT0dZR+AlfA@public.gmane.org>
2018-09-06  7:12           ` Yann Droneaud
2018-09-05 19:22       ` Jan Engelhardt
  -- strict thread matches above, loose matches on Subject: below --
2018-09-06  9:18 David Howells

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox