[PPL-devel] [GIT] ppl/ppl(master): Avoid implementation-defined behavior by having bitfields of explicit unsigned integral type .
Roberto Bagnara
bagnara at cs.unipr.it
Fri Oct 28 17:48:21 CEST 2011
Module: ppl/ppl
Branch: master
Commit: 3ab4d6ede25cc2a5266a4d73da06e7908bf2074d
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=3ab4d6ede25cc2a5266a4d73da06e7908bf2074d
Author: Roberto Bagnara <bagnara at cs.unipr.it>
Date: Fri Oct 28 17:43:43 2011 +0200
Avoid implementation-defined behavior by having bitfields of explicit unsigned integral type.
Detected by ECLAIR service bitftype.
---
src/Concrete_Expression.defs.hh | 11 +++++------
src/Concrete_Expression.inlines.hh | 12 ++++++++----
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/Concrete_Expression.defs.hh b/src/Concrete_Expression.defs.hh
index f7ce588..7860a57 100644
--- a/src/Concrete_Expression.defs.hh
+++ b/src/Concrete_Expression.defs.hh
@@ -66,8 +66,7 @@ public:
The behavior is undefined if \p *this does not encode a bounded
integer type.
*/
- Bounded_Integer_Type_Width
- bounded_integer_type_width() const;
+ Bounded_Integer_Type_Width bounded_integer_type_width() const;
/*! \brief
Returns the representation of the bounded integer type encoded by
@@ -104,10 +103,10 @@ private:
//! A 32-bit word encoding the type.
struct Implementation {
unsigned int bounded_integer:1;
- Bounded_Integer_Type_Width bounded_integer_type_width:23;
- Bounded_Integer_Type_Representation bounded_integer_type_representation:2;
- Bounded_Integer_Type_Overflow bounded_integer_type_overflow:2;
- Floating_Point_Format floating_point_format:4;
+ unsigned int bounded_integer_type_width:23;
+ unsigned int bounded_integer_type_representation:2;
+ unsigned int bounded_integer_type_overflow:2;
+ unsigned int floating_point_format:4;
};
//! Constructor from \p implementation.
diff --git a/src/Concrete_Expression.inlines.hh b/src/Concrete_Expression.inlines.hh
index 952ada9..b12963a 100644
--- a/src/Concrete_Expression.inlines.hh
+++ b/src/Concrete_Expression.inlines.hh
@@ -71,22 +71,26 @@ Concrete_Expression_Type::is_floating_point() const {
inline Bounded_Integer_Type_Width
Concrete_Expression_Type::bounded_integer_type_width() const {
- return impl.bounded_integer_type_width;
+ unsigned int u = impl.bounded_integer_type_width;
+ return static_cast<Bounded_Integer_Type_Width>(u);
}
inline Bounded_Integer_Type_Representation
Concrete_Expression_Type::bounded_integer_type_representation() const {
- return impl.bounded_integer_type_representation;
+ unsigned int u = impl.bounded_integer_type_representation;
+ return static_cast<Bounded_Integer_Type_Representation>(u);
}
inline Bounded_Integer_Type_Overflow
Concrete_Expression_Type::bounded_integer_type_overflow() const {
- return impl.bounded_integer_type_overflow;
+ unsigned int u = impl.bounded_integer_type_overflow;
+ return static_cast<Bounded_Integer_Type_Overflow>(u);
}
inline Floating_Point_Format
Concrete_Expression_Type::floating_point_format() const {
- return impl.floating_point_format;
+ unsigned int u = impl.floating_point_format;
+ return static_cast<Floating_Point_Format>(u);
}
template <typename Target>
More information about the PPL-devel
mailing list