[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3] RFC: Automatically check xen's public headers for C++ pitfalls.



On 02/26/15 11:24, Tim Deegan wrote:
> Add a check, like the existing check for non-ANSI C in the public
> headers, that runs the public headers through a C++ compiler to
> flag non-C++-friendly constructs.
> 
> Unlike the ANSI C check, we accept GCC-isms (gnu++98), and we also
> check various tools-only headers.
> 
> Explicitly _not_ addressing the use of 'private' in various fields,
> since we'd previously decided not to fix that.

This sentence and the "-Dprivate=private_is_a_keyword_in_cpp" below
appear to be at odds.  Maybe add something like:

The check ignores the use of 'private'.

> 
> Also tidy up the runes for these checks to be a bit more readable.
> 
> Reported-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx>
> Signed-off-by: Tim Deegan <tim@xxxxxxx>
> Cc: Jan Beulich <JBeulich@xxxxxxxx>
> 
> ---
> 

You can add my

Tested-by: Don Slutz <dslutz@xxxxxxxxxxx>

   -Don Slutz

> v3: rebase on staging.
> 
> v2: test more headers;
>     define __XEN_TOOLS__;
>     use g++98 rather than ansi;
>     tidy the makefile for readability;
>     add a missing include to flask_op.h, which uses evtchn_port_t.
> ---
>  .gitignore                        |  1 +
>  config/StdGNU.mk                  |  2 ++
>  config/SunOS.mk                   |  1 +
>  xen/include/Makefile              | 28 ++++++++++++++++++++++++----
>  xen/include/public/xsm/flask_op.h |  2 ++
>  5 files changed, 30 insertions(+), 4 deletions(-)
> 
> diff --git a/.gitignore b/.gitignore
> index 13ee05b..78958ea 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -233,6 +233,7 @@ xen/arch/*/efi/compat.c
>  xen/arch/*/efi/efi.h
>  xen/arch/*/efi/runtime.c
>  xen/include/headers.chk
> +xen/include/headers++.chk
>  xen/include/asm
>  xen/include/asm-*/asm-offsets.h
>  xen/include/compat/*
> diff --git a/config/StdGNU.mk b/config/StdGNU.mk
> index 4efebe3..e10ed39 100644
> --- a/config/StdGNU.mk
> +++ b/config/StdGNU.mk
> @@ -2,9 +2,11 @@ AS         = $(CROSS_COMPILE)as
>  LD         = $(CROSS_COMPILE)ld
>  ifeq ($(clang),y)
>  CC         = $(CROSS_COMPILE)clang
> +CXX        = $(CROSS_COMPILE)clang++
>  LD_LTO     = $(CROSS_COMPILE)llvm-ld
>  else
>  CC         = $(CROSS_COMPILE)gcc
> +CXX        = $(CROSS_COMPILE)g++
>  LD_LTO     = $(CROSS_COMPILE)ld
>  endif
>  CPP        = $(CC) -E
> diff --git a/config/SunOS.mk b/config/SunOS.mk
> index 3316280..c2be37d 100644
> --- a/config/SunOS.mk
> +++ b/config/SunOS.mk
> @@ -2,6 +2,7 @@ AS         = $(CROSS_COMPILE)gas
>  LD         = $(CROSS_COMPILE)gld
>  CC         = $(CROSS_COMPILE)gcc
>  CPP        = $(CROSS_COMPILE)gcc -E
> +CXX        = $(CROSS_COMPILE)g++
>  AR         = $(CROSS_COMPILE)gar
>  RANLIB     = $(CROSS_COMPILE)granlib
>  NM         = $(CROSS_COMPILE)gnm
> diff --git a/xen/include/Makefile b/xen/include/Makefile
> index 94112d1..d48a642 100644
> --- a/xen/include/Makefile
> +++ b/xen/include/Makefile
> @@ -87,13 +87,33 @@ compat/xlat.h: $(addprefix compat/.xlat/,$(xlat-y)) 
> Makefile
>  
>  ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
>  
> -all: headers.chk
> +all: headers.chk headers++.chk
>  
> -headers.chk: $(filter-out public/arch-% public/%ctl.h public/xsm/% 
> public/%hvm/save.h, $(wildcard public/*.h public/*/*.h) $(public-y)) Makefile
> -     for i in $(filter %.h,$^); do $(CC) -ansi -include stdint.h -Wall -W 
> -Werror -S -o /dev/null -x c $$i || exit 1; echo $$i; done >$@.new
> +PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard 
> public/*.h public/*/*.h) $(public-y))
> +
> +PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% 
> public/%hvm/save.h, $(PUBLIC_HEADERS))
> +
> +headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
> +     for i in $(filter %.h,$^); do \
> +         $(CC) -x c -ansi -Wall -Werror -include stdint.h \
> +               -S -o /dev/null $$i || exit 1; \
> +         echo $$i; \
> +     done >$@.new
> +     mv $@.new $@
> +
> +headers++.chk: $(PUBLIC_HEADERS) Makefile
> +     if $(CXX) -v >/dev/null 2>&1; then \
> +         for i in $(filter %.h,$^); do \
> +             $(CXX) -x c++ -std=gnu++98 -Wall -Werror \
> +                    -D__XEN_TOOLS__ -Dprivate=private_is_a_keyword_in_cpp \
> +                    -include stdint.h -include public/xen.h \
> +                    -S -o /dev/null $$i || exit 1; \
> +             echo $$i; \
> +         done ; \
> +     fi >$@.new
>       mv $@.new $@
>  
>  endif
>  
>  clean::
> -     rm -rf compat headers.chk
> +     rm -rf compat headers.chk headers++.chk
> diff --git a/xen/include/public/xsm/flask_op.h 
> b/xen/include/public/xsm/flask_op.h
> index 233de81..f874589 100644
> --- a/xen/include/public/xsm/flask_op.h
> +++ b/xen/include/public/xsm/flask_op.h
> @@ -25,6 +25,8 @@
>  #ifndef __FLASK_OP_H__
>  #define __FLASK_OP_H__
>  
> +#include "../event_channel.h"
> +
>  #define XEN_FLASK_INTERFACE_VERSION 1
>  
>  struct xen_flask_load {
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.