analyzer: add concrete-ranges.h/cc

This patch introduces a new template class:
  ana::concrete::range<ConcreteValueType>
for storing a unit-safe range of arbitrary-precision integer values,
such as:
- bits [0, 3)
- bytes [0, 1024)
- integers [5, 10)  (unitless)

As in the previous patch, nothing uses this yet, but it is used in
my upcoming rewrite of the analyzer's state-tracking for ranges that
have concretely-known endpoints.

gcc/ChangeLog:
	* Makefile.in (ANALYZER_OBJS): Add analyzer/concrete-ranges.o.

gcc/analyzer/ChangeLog:
	* analyzer-selftests.cc (run_analyzer_selftests): Call
	analyzer_concrete_ranges_cc_tests.
	* analyzer-selftests.h (analyzer_concrete_ranges_cc_tests): New
	decl.
	* concrete-ranges.cc: New file, based in parts on material from
	ranges.cc
	* concrete-ranges.h: New file.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
5 files changed