[PATCH v4 00/25] improve constexpr handling

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

 



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

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux