linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/25] improve constexpr handling
@ 2017-03-31  1:44 Luc Van Oostenryck
  2017-03-31  1:44 ` [PATCH v4 01/25] constexpr: introduce additional expression constness tracking flags Luc Van Oostenryck
                   ` (25 more replies)
  0 siblings, 26 replies; 30+ messages in thread
From: Luc Van Oostenryck @ 2017-03-31  1:44 UTC (permalink / raw)
  To: linux-sparse; +Cc: Christopher Li, Nicolai Stange, Luc Van Oostenryck

Here is a respin of the series originally made and
submitted by Nicolai Stange.

The goal of this series is to improve the tracking of 
expression constness in the sense of C99 [6.4.4, 6.6]:
more fine-grained and more correct. A new flag is added
for a strict mode while by default offering the relaxed
mode we're used to, for example for kernel compile.

Many thanks for Nicolai for his great job.

Changes since v3:
* take Chris' remarks in account:
  - rename 'constexpr_flags' to the shorter 'flags'
  - rename 'CONSTEXPR_FLAG_XYZ' to something shorter
  - remove redundant 'INT' in the CONST_MASK
  - try to avoid long lines and 
  - try to avoid to have to break lines
* and also:
  - initialize EXPR_VALUE with SET_INT when typed
  - extract the logic added in evaluate_cast and
    use it in cast_to() where it is also needed
  - remove patch 20 (symbol: do not inherit storage mod...)
    as now MOD_PTRINHERIT doesn't imply MOD_STORAGE anymore
  - avoid borrowing of surrounding storage mods
  - add constness stuff for __builtin_bswap()


This serie can also be pulled from:
	git://github.com/lucvoo/sparse.git constexpr-v4
the changes up to commit:
	4d963a28d371ce75f65a70aa29f14cec5f08d8ff
since commit:
	5c9411a5c0482b0ceb70861114df4c229e1298ca

Nicolai Stange (20):
  constexpr: introduce additional expression constness tracking flags
  constexpr: init flags at expression allocation
  constexpr: examine constness of casts at evaluation only
  constexpr: examine constness of binops and alike at evaluation only
  constexpr: examine constness of preops at evaluation only
  constexpr: examine constness of conditionals at evaluation only
  constexpr: add support for tagging arithmetic constant expressions
  constexpr: add support for tagging address constants
  constexpr: check static storage duration objects' intializers' constness
  constexpr: recognize static objects as address constants
  constexpr: recognize address constants created through casts
  constexpr: recognize address constants created through pointer arithmetic
  constexpr: recognize members of static compound objects as address constants
  constexpr: recognize string literals as address constants
  constexpr: recognize references to labels as address constants
  constexpr: examine constness of __builtin_offsetof at evaluation only
  constexpr: flag builtins constant_p, safe_p and warning as constexprs
  constexpr: relax some constant expression rules for pointer expressions
  constexpr: support compound literals as address constants
  constexpr: treat comparisons between types as integer constexpr

Luc Van Oostenryck (5):
  constexpr: rename handle_simple_initializer() to handle_initializer()
  constexpr: collect storage modifiers of initializers
  return an error if too few args
  give default return type in evaluate_call()
  constexpr: flag __builtin_bswap() as constexpr


 builtin.c                                    |  26 +++-
 evaluate.c                                   | 206 ++++++++++++++++++++-------
 expand.c                                     |   2 +-
 expression.c                                 |  48 +++----
 expression.h                                 |  70 ++++++++-
 lib.c                                        |   2 +
 lib.h                                        |   1 +
 sparse.1                                     |   9 ++
 validation/constexpr-addr-of-static-member.c |  26 ++++
 validation/constexpr-addr-of-static.c        |  36 +++++
 validation/constexpr-binop.c                 |  33 +++++
 validation/constexpr-cast.c                  |  25 ++++
 validation/constexpr-compound-literal.c      |  19 +++
 validation/constexpr-conditional.c           |  34 +++++
 validation/constexpr-init.c                  |  60 ++++++++
 validation/constexpr-labelref.c              |  14 ++
 validation/constexpr-offsetof.c              |  21 +++
 validation/constexpr-pointer-arith.c         |  28 ++++
 validation/constexpr-pointer-cast.c          |  13 ++
 validation/constexpr-preop.c                 |  29 ++++
 validation/constexpr-pure-builtin.c          |  23 +++
 validation/constexpr-string.c                |   9 ++
 validation/constexpr-types-compatible-p.c    |   8 ++
 23 files changed, 649 insertions(+), 93 deletions(-)
 create mode 100644 validation/constexpr-addr-of-static-member.c
 create mode 100644 validation/constexpr-addr-of-static.c
 create mode 100644 validation/constexpr-binop.c
 create mode 100644 validation/constexpr-cast.c
 create mode 100644 validation/constexpr-compound-literal.c
 create mode 100644 validation/constexpr-conditional.c
 create mode 100644 validation/constexpr-init.c
 create mode 100644 validation/constexpr-labelref.c
 create mode 100644 validation/constexpr-offsetof.c
 create mode 100644 validation/constexpr-pointer-arith.c
 create mode 100644 validation/constexpr-pointer-cast.c
 create mode 100644 validation/constexpr-preop.c
 create mode 100644 validation/constexpr-pure-builtin.c
 create mode 100644 validation/constexpr-string.c
 create mode 100644 validation/constexpr-types-compatible-p.c

-- 
2.12.0


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

end of thread, other threads:[~2017-08-11 11:14 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-31  1:44 [PATCH v4 00/25] improve constexpr handling Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 01/25] constexpr: introduce additional expression constness tracking flags Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 02/25] constexpr: init flags at expression allocation Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 03/25] constexpr: examine constness of casts at evaluation only Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 04/25] constexpr: examine constness of binops and alike " Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 05/25] constexpr: examine constness of preops " Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 06/25] constexpr: examine constness of conditionals " Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 07/25] constexpr: add support for tagging arithmetic constant expressions Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 08/25] constexpr: add support for tagging address constants Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 09/25] constexpr: rename handle_simple_initializer() to handle_initializer() Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 10/25] constexpr: collect storage modifiers of initializers Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 11/25] constexpr: check static storage duration objects' intializers' constness Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 12/25] constexpr: recognize static objects as address constants Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 13/25] constexpr: recognize address constants created through casts Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 14/25] constexpr: recognize address constants created through pointer arithmetic Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 15/25] constexpr: recognize members of static compound objects as address constants Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 16/25] constexpr: recognize string literals " Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 17/25] constexpr: recognize references to labels " Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 18/25] constexpr: examine constness of __builtin_offsetof at evaluation only Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 19/25] constexpr: flag builtins constant_p, safe_p and warning as constexprs Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 20/25] constexpr: relax some constant expression rules for pointer expressions Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 21/25] constexpr: support compound literals as address constants Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 22/25] constexpr: treat comparisons between types as integer constexpr Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 23/25] return an error if too few args Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 24/25] give default return type in evaluate_call() Luc Van Oostenryck
2017-03-31  1:44 ` [PATCH v4 25/25] constexpr: flag __builtin_bswap() as constexpr Luc Van Oostenryck
2017-08-10 12:36 ` [PATCH v4 00/25] improve constexpr handling Christopher Li
2017-08-10 22:00   ` Luc Van Oostenryck
2017-08-11  1:24     ` Christopher Li
2017-08-11 11:14       ` Luc Van Oostenryck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).