Index: libcfa/src/limits.cfa
===================================================================
--- libcfa/src/limits.cfa	(revision 69c5c001921edf7a77ff0c53ac4f0d0e8044b405)
+++ libcfa/src/limits.cfa	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Sep 30 22:56:32 2020
-// Update Count     : 76
+// Last Modified On : Thu Mar  1 16:22:51 2018
+// Update Count     : 74
 //
 
@@ -23,131 +23,131 @@
 // Integral Constants
 
-signed char MIN = SCHAR_MIN;
-unsigned char MIN = 0;
-short int MIN = SHRT_MIN;
-unsigned short int MIN = 0;
-int MIN = INT_MIN;
-unsigned int MIN = 0;
-long int MIN = LONG_MIN;
-unsigned long int MIN = 0;
-long long int MIN = LLONG_MIN;
-unsigned long long int MIN = 0;
+const signed char MIN = SCHAR_MIN;
+const unsigned char MIN = 0;
+const short int MIN = SHRT_MIN;
+const unsigned short int MIN = 0;
+const int MIN = INT_MIN;
+const unsigned int MIN = 0;
+const long int MIN = LONG_MIN;
+const unsigned long int MIN = 0;
+const long long int MIN = LLONG_MIN;
+const unsigned long long int MIN = 0;
 
-signed char MAX = SCHAR_MAX;
-unsigned char MAX = UCHAR_MAX;
-short int MAX = SHRT_MAX;
-unsigned short int MAX = USHRT_MAX;
-int MAX = INT_MAX;
-unsigned int MAX = UINT_MAX;
-long int MAX = LONG_MAX;
-unsigned long int MAX = ULONG_MAX;
-long long int MAX = LLONG_MAX;
-unsigned long long int MAX = ULLONG_MAX;
+const signed char MAX = SCHAR_MAX;
+const unsigned char MAX = UCHAR_MAX;
+const short int MAX = SHRT_MAX;
+const unsigned short int MAX = USHRT_MAX;
+const int MAX = INT_MAX;
+const unsigned int MAX = UINT_MAX;
+const long int MAX = LONG_MAX;
+const unsigned long int MAX = ULONG_MAX;
+const long long int MAX = LLONG_MAX;
+const unsigned long long int MAX = ULLONG_MAX;
 
 // Floating-Point Constants
 
-float MIN = FLT_MIN;
-double MIN = DBL_MIN;
-long double MIN = LDBL_MIN;
-float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;
-double _Complex MIN = DBL_MIN +  DBL_MIN * I;
-long double _Complex MIN = LDBL_MIN + LDBL_MIN * I;
+const float MIN = FLT_MIN;
+const double MIN = DBL_MIN;
+const long double MIN = LDBL_MIN;
+const float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;
+const double _Complex MIN = DBL_MIN +  DBL_MIN * I;
+const long double _Complex MIN = LDBL_MIN + LDBL_MIN * I;
 
-float MAX = FLT_MAX;
-double MAX = DBL_MAX;
-long double MAX = LDBL_MAX;
-float _Complex MAX = FLT_MAX + FLT_MAX * I;
-double _Complex MAX = DBL_MAX + DBL_MAX * I;
-long double _Complex MAX = LDBL_MAX + LDBL_MAX * I;
+const float MAX = FLT_MAX;
+const double MAX = DBL_MAX;
+const long double MAX = LDBL_MAX;
+const float _Complex MAX = FLT_MAX + FLT_MAX * I;
+const double _Complex MAX = DBL_MAX + DBL_MAX * I;
+const long double _Complex MAX = LDBL_MAX + LDBL_MAX * I;
 
-float PI = (float)M_PI;									// pi
-float PI_2 = (float)M_PI_2;								// pi / 2
-float PI_4 = (float)M_PI_4;								// pi / 4
-float _1_PI = (float)M_1_PI;							// 1 / pi
-float _2_PI = (float)M_2_PI;							// 2 / pi
-float _2_SQRT_PI = (float)M_2_SQRTPI;					// 2 / sqrt(pi)
+const float PI = (float)M_PI;							// pi
+const float PI_2 = (float)M_PI_2;						// pi / 2
+const float PI_4 = (float)M_PI_4;						// pi / 4
+const float _1_PI = (float)M_1_PI;						// 1 / pi
+const float _2_PI = (float)M_2_PI;						// 2 / pi
+const float _2_SQRT_PI = (float)M_2_SQRTPI;				// 2 / sqrt(pi)
 
-double PI = M_PI;										// pi
-double PI_2 = M_PI_2;									// pi / 2
-double PI_4 = M_PI_4;									// pi / 4
-double _1_PI = M_1_PI;									// 1 / pi
-double _2_PI = M_2_PI;									// 2 / pi
-double _2_SQRT_PI = M_2_SQRTPI;							// 2 / sqrt(pi)
+const double PI = M_PI;									// pi
+const double PI_2 = M_PI_2;								// pi / 2
+const double PI_4 = M_PI_4;								// pi / 4
+const double _1_PI = M_1_PI;							// 1 / pi
+const double _2_PI = M_2_PI;							// 2 / pi
+const double _2_SQRT_PI = M_2_SQRTPI;					// 2 / sqrt(pi)
 
-long double PI = M_PIl;									// pi
-long double PI_2 = M_PI_2l;								// pi / 2
-long double PI_4 = M_PI_4l;								// pi / 4
-long double _1_PI = M_1_PIl;							// 1 / pi
-long double _2_PI = M_2_PIl;							// 2 / pi
-long double _2_SQRT_PI = M_2_SQRTPIl;					// 2 / sqrt(pi)
+const long double PI = M_PIl;							// pi
+const long double PI_2 = M_PI_2l;						// pi / 2
+const long double PI_4 = M_PI_4l;						// pi / 4
+const long double _1_PI = M_1_PIl;						// 1 / pi
+const long double _2_PI = M_2_PIl;						// 2 / pi
+const long double _2_SQRT_PI = M_2_SQRTPIl;				// 2 / sqrt(pi)
 
-float _Complex PI = (float)M_PI + 0.0_iF;				// pi
-float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;			// pi / 2
-float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;			// pi / 4
-float _Complex _1_PI = (float)M_1_PI + 0.0_iF;			// 1 / pi
-float _Complex _2_PI = (float)M_2_PI + 0.0_iF;			// 2 / pi
-float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)
+const float _Complex PI = (float)M_PI + 0.0_iF;			// pi
+const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;		// pi / 2
+const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;		// pi / 4
+const float _Complex _1_PI = (float)M_1_PI + 0.0_iF;	// 1 / pi
+const float _Complex _2_PI = (float)M_2_PI + 0.0_iF;	// 2 / pi
+const float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)
 
-double _Complex PI = M_PI + 0.0_iD;						// pi
-double _Complex PI_2 = M_PI_2 + 0.0_iD;					// pi / 2
-double _Complex PI_4 = M_PI_4 + 0.0_iD;					// pi / 4
-double _Complex _1_PI = M_1_PI + 0.0_iD;				// 1 / pi
-double _Complex _2_PI = M_2_PI + 0.0_iD;				// 2 / pi
-double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD;		// 2 / sqrt(pi)
+const double _Complex PI = M_PI + 0.0_iD;				// pi
+const double _Complex PI_2 = M_PI_2 + 0.0_iD;			// pi / 2
+const double _Complex PI_4 = M_PI_4 + 0.0_iD;			// pi / 4
+const double _Complex _1_PI = M_1_PI + 0.0_iD;			// 1 / pi
+const double _Complex _2_PI = M_2_PI + 0.0_iD;			// 2 / pi
+const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD;	// 2 / sqrt(pi)
 
-long double _Complex PI = M_PIl + 0.0_iL;				// pi
-long double _Complex PI_2 = M_PI_2l + 0.0_iL;			// pi / 2
-long double _Complex PI_4 = M_PI_4l + 0.0_iL;			// pi / 4
-long double _Complex _1_PI = M_1_PIl + 0.0_iL;			// 1 / pi
-long double _Complex _2_PI = M_2_PIl + 0.0_iL;			// 2 / pi
-long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)
+const long double _Complex PI = M_PIl + 0.0_iL;			// pi
+const long double _Complex PI_2 = M_PI_2l + 0.0_iL;		// pi / 2
+const long double _Complex PI_4 = M_PI_4l + 0.0_iL;		// pi / 4
+const long double _Complex _1_PI = M_1_PIl + 0.0_iL;	// 1 / pi
+const long double _Complex _2_PI = M_2_PIl + 0.0_iL;	// 2 / pi
+const long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)
 
-float E = (float)M_E;									// e
-float LOG2_E = (float)M_LOG2E;							// log_2(e)
-float LOG10_E = (float)M_LOG10E;						// log_10(e)
-float LN_2 = (float)M_LN2;								// log_e(2)
-float LN_10 = (float)M_LN10;							// log_e(10)
-float SQRT_2 = (float)M_SQRT2;							// sqrt(2)
-float _1_SQRT_2 = (float)M_SQRT1_2;						// 1 / sqrt(2)
+const float E = (float)M_E;								// e
+const float LOG2_E = (float)M_LOG2E;					// log_2(e)
+const float LOG10_E = (float)M_LOG10E;					// log_10(e)
+const float LN_2 = (float)M_LN2;						// log_e(2)
+const float LN_10 = (float)M_LN10;						// log_e(10)
+const float SQRT_2 = (float)M_SQRT2;					// sqrt(2)
+const float _1_SQRT_2 = (float)M_SQRT1_2;				// 1 / sqrt(2)
 
-double E = M_E;											// e
-double LOG2_E = M_LOG2E;								// log_2(e)
-double LOG10_E = M_LOG10E;								// log_10(e)
-double LN_2 = M_LN2;									// log_e(2)
-double LN_10 = M_LN10;									// log_e(10)
-double SQRT_2 = M_SQRT2;								// sqrt(2)
-double _1_SQRT_2 = M_SQRT1_2;							// 1 / sqrt(2)
+const double E = M_E;									// e
+const double LOG2_E = M_LOG2E;							// log_2(e)
+const double LOG10_E = M_LOG10E;						// log_10(e)
+const double LN_2 = M_LN2;								// log_e(2)
+const double LN_10 = M_LN10;							// log_e(10)
+const double SQRT_2 = M_SQRT2;							// sqrt(2)
+const double _1_SQRT_2 = M_SQRT1_2;						// 1 / sqrt(2)
 
-long double E = M_El;									// e
-long double LOG2_E = M_LOG2El;							// log_2(e)
-long double LOG10_E = M_LOG10El;						// log_10(e)
-long double LN_2 = M_LN2l;								// log_e(2)
-long double LN_10 = M_LN10l;							// log_e(10)
-long double SQRT_2 = M_SQRT2l;							// sqrt(2)
-long double _1_SQRT_2 = M_SQRT1_2l;						// 1 / sqrt(2)
+const long double E = M_El;								// e
+const long double LOG2_E = M_LOG2El;					// log_2(e)
+const long double LOG10_E = M_LOG10El;					// log_10(e)
+const long double LN_2 = M_LN2l;						// log_e(2)
+const long double LN_10 = M_LN10l;						// log_e(10)
+const long double SQRT_2 = M_SQRT2l;					// sqrt(2)
+const long double _1_SQRT_2 = M_SQRT1_2l;				// 1 / sqrt(2)
 
-float _Complex E = M_E + 0.0_iF;						// e
-float _Complex LOG2_E = M_LOG2E + 0.0_iF;				// log_2(e)
-float _Complex LOG10_E = M_LOG10E + 0.0_iF;				// log_10(e)
-float _Complex LN_2 = M_LN2 + 0.0_iF;					// log_e(2)
-float _Complex LN_10 = M_LN10 + 0.0_iF;					// log_e(10)
-float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;				// sqrt(2)
-float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;			// 1 / sqrt(2)
+const float _Complex E = M_E + 0.0_iF;					// e
+const float _Complex LOG2_E = M_LOG2E + 0.0_iF;			// log_2(e)
+const float _Complex LOG10_E = M_LOG10E + 0.0_iF;		// log_10(e)
+const float _Complex LN_2 = M_LN2 + 0.0_iF;				// log_e(2)
+const float _Complex LN_10 = M_LN10 + 0.0_iF;			// log_e(10)
+const float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;			// sqrt(2)
+const float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;	// 1 / sqrt(2)
 
-double _Complex E = M_E + 0.0_iD;						// e
-double _Complex LOG2_E = M_LOG2E + 0.0_iD;				// log_2(e)
-double _Complex LOG10_E = M_LOG10E + 0.0_iD;			// log_10(e)
-double _Complex LN_2 = M_LN2 + 0.0_iD;					// log_e(2)
-double _Complex LN_10 = M_LN10 + 0.0_iD;				// log_e(10)
-double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;				// sqrt(2)
-double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;			// 1 / sqrt(2)
+const double _Complex E = M_E + 0.0_iD;					// e
+const double _Complex LOG2_E = M_LOG2E + 0.0_iD;		// log_2(e)
+const double _Complex LOG10_E = M_LOG10E + 0.0_iD;		// log_10(e)
+const double _Complex LN_2 = M_LN2 + 0.0_iD;			// log_e(2)
+const double _Complex LN_10 = M_LN10 + 0.0_iD;			// log_e(10)
+const double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;		// sqrt(2)
+const double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;	// 1 / sqrt(2)
 
-long double _Complex E = M_El + 0.0_iL;					// e
-long double _Complex LOG2_E = M_LOG2El + 0.0_iL;		// log_2(e)
-long double _Complex LOG10_E = M_LOG10El + 0.0_iL;		// log_10(e)
-long double _Complex LN_2 = M_LN2l + 0.0_iL;			// log_e(2)
-long double _Complex LN_10 = M_LN10l + 0.0_iL;			// log_e(10)
-long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;		// sqrt(2)
-long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL;	// 1 / sqrt(2)
+const long double _Complex E = M_El + 0.0_iL;			// e
+const long double _Complex LOG2_E = M_LOG2El + 0.0_iL;	// log_2(e)
+const long double _Complex LOG10_E = M_LOG10El + 0.0_iL; // log_10(e)
+const long double _Complex LN_2 = M_LN2l + 0.0_iL;		// log_e(2)
+const long double _Complex LN_10 = M_LN10l + 0.0_iL;	// log_e(10)
+const long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;	// sqrt(2)
+const long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL; // 1 / sqrt(2)
 
 // Local Variables: //
Index: libcfa/src/limits.hfa
===================================================================
--- libcfa/src/limits.hfa	(revision 69c5c001921edf7a77ff0c53ac4f0d0e8044b405)
+++ libcfa/src/limits.hfa	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Sep 30 22:56:35 2020
-// Update Count     : 15
+// Last Modified On : Thu Mar  1 16:20:54 2018
+// Update Count     : 13
 //
 
@@ -18,131 +18,131 @@
 // Integral Constants
 
-extern signed char MIN;
-extern unsigned char MIN;
-extern short int MIN;
-extern unsigned short int MIN;
-extern int MIN;
-extern unsigned int MIN;
-extern long int MIN;
-extern unsigned long int MIN;
-extern long long int MIN;
-extern unsigned long long int MIN;
+extern const signed char MIN;
+extern const unsigned char MIN;
+extern const short int MIN;
+extern const unsigned short int MIN;
+extern const int MIN;
+extern const unsigned int MIN;
+extern const long int MIN;
+extern const unsigned long int MIN;
+extern const long long int MIN;
+extern const unsigned long long int MIN;
 
-extern signed char MAX;
-extern unsigned char MAX;
-extern short int MAX;
-extern unsigned short int MAX;
-extern int MAX;
-extern unsigned int MAX;
-extern long int MAX;
-extern unsigned long int MAX;
-extern long long int MAX;
-extern unsigned long long int MAX;
+extern const signed char MAX;
+extern const unsigned char MAX;
+extern const short int MAX;
+extern const unsigned short int MAX;
+extern const int MAX;
+extern const unsigned int MAX;
+extern const long int MAX;
+extern const unsigned long int MAX;
+extern const long long int MAX;
+extern const unsigned long long int MAX;
 
 // Floating-Point Constants
 
-extern float MIN;
-extern double MIN;
-extern long double MIN;
-extern float _Complex MIN;
-extern double _Complex MIN;
-extern long double _Complex MIN;
+extern const float MIN;
+extern const double MIN;
+extern const long double MIN;
+extern const float _Complex MIN;
+extern const double _Complex MIN;
+extern const long double _Complex MIN;
 
-extern float MAX;
-extern double MAX;
-extern long double MAX;
-extern float _Complex MAX;
-extern double _Complex MAX;
-extern long double _Complex MAX;
+extern const float MAX;
+extern const double MAX;
+extern const long double MAX;
+extern const float _Complex MAX;
+extern const double _Complex MAX;
+extern const long double _Complex MAX;
 
-extern float PI;										// pi
-extern float PI_2;										// pi / 2
-extern float PI_4;										// pi / 4
-extern float _1_PI;										// 1 / pi
-extern float _2_PI;										// 2 / pi
-extern float _2_SQRT_PI;								// 2 / sqrt(pi)
+extern const float PI;									// pi
+extern const float PI_2;								// pi / 2
+extern const float PI_4;								// pi / 4
+extern const float _1_PI;								// 1 / pi
+extern const float _2_PI;								// 2 / pi
+extern const float _2_SQRT_PI;							// 2 / sqrt(pi)
 
-extern double PI;										// pi
-extern double PI_2;										// pi / 2
-extern double PI_4;										// pi / 4
-extern double _1_PI;									// 1 / pi
-extern double _2_PI;									// 2 / pi
-extern double _2_SQRT_PI;								// 2 / sqrt(pi)
+extern const double PI;									// pi
+extern const double PI_2;								// pi / 2
+extern const double PI_4;								// pi / 4
+extern const double _1_PI;								// 1 / pi
+extern const double _2_PI;								// 2 / pi
+extern const double _2_SQRT_PI;							// 2 / sqrt(pi)
 
-extern long double PI;									// pi
-extern long double PI_2;								// pi / 2
-extern long double PI_4;								// pi / 4
-extern long double _1_PI;								// 1 / pi
-extern long double _2_PI;								// 2 / pi
-extern long double _2_SQRT_PI;							// 2 / sqrt(pi)
+extern const long double PI;							// pi
+extern const long double PI_2;							// pi / 2
+extern const long double PI_4;							// pi / 4
+extern const long double _1_PI;							// 1 / pi
+extern const long double _2_PI;							// 2 / pi
+extern const long double _2_SQRT_PI;					// 2 / sqrt(pi)
 
-extern float _Complex PI;								// pi
-extern float _Complex PI_2;								// pi / 2
-extern float _Complex PI_4;								// pi / 4
-extern float _Complex _1_PI;							// 1 / pi
-extern float _Complex _2_PI;							// 2 / pi
-extern float _Complex _2_SQRT_PI;						// 2 / sqrt(pi)
+extern const float _Complex PI;							// pi
+extern const float _Complex PI_2;						// pi / 2
+extern const float _Complex PI_4;						// pi / 4
+extern const float _Complex _1_PI;						// 1 / pi
+extern const float _Complex _2_PI;						// 2 / pi
+extern const float _Complex _2_SQRT_PI;					// 2 / sqrt(pi)
 
-extern double _Complex PI;								// pi
-extern double _Complex PI_2;							// pi / 2
-extern double _Complex PI_4;							// pi / 4
-extern double _Complex _1_PI;							// 1 / pi
-extern double _Complex _2_PI;							// 2 / pi
-extern double _Complex _2_SQRT_PI;						// 2 / sqrt(pi)
+extern const double _Complex PI;						// pi
+extern const double _Complex PI_2;						// pi / 2
+extern const double _Complex PI_4;						// pi / 4
+extern const double _Complex _1_PI;						// 1 / pi
+extern const double _Complex _2_PI;						// 2 / pi
+extern const double _Complex _2_SQRT_PI;				// 2 / sqrt(pi)
 
-extern long double _Complex PI;							// pi
-extern long double _Complex PI_2;						// pi / 2
-extern long double _Complex PI_4;						// pi / 4
-extern long double _Complex _1_PI;						// 1 / pi
-extern long double _Complex _2_PI;						// 2 / pi
-extern long double _Complex _2_SQRT_PI;					// 2 / sqrt(pi)
+extern const long double _Complex PI;					// pi
+extern const long double _Complex PI_2;					// pi / 2
+extern const long double _Complex PI_4;					// pi / 4
+extern const long double _Complex _1_PI;				// 1 / pi
+extern const long double _Complex _2_PI;				// 2 / pi
+extern const long double _Complex _2_SQRT_PI;			// 2 / sqrt(pi)
 
-extern float E;											// e
-extern float LOG2_E;									// log_2(e)
-extern float LOG10_E;									// log_10(e)
-extern float LN_2;										// log_e(2)
-extern float LN_10;										// log_e(10)
-extern float SQRT_2;									// sqrt(2)
-extern float _1_SQRT_2;									// 1 / sqrt(2)
+extern const float E;									// e
+extern const float LOG2_E;								// log_2(e)
+extern const float LOG10_E;								// log_10(e)
+extern const float LN_2;								// log_e(2)
+extern const float LN_10;								// log_e(10)
+extern const float SQRT_2;								// sqrt(2)
+extern const float _1_SQRT_2;							// 1 / sqrt(2)
 
-extern double E;										// e
-extern double LOG2_E;									// log_2(e)
-extern double LOG10_E;									// log_10(e)
-extern double LN_2;										// log_e(2)
-extern double LN_10;									// log_e(10)
-extern double SQRT_2;									// sqrt(2)
-extern double _1_SQRT_2;								// 1 / sqrt(2)
+extern const double E;									// e
+extern const double LOG2_E;								// log_2(e)
+extern const double LOG10_E;							// log_10(e)
+extern const double LN_2;								// log_e(2)
+extern const double LN_10;								// log_e(10)
+extern const double SQRT_2;								// sqrt(2)
+extern const double _1_SQRT_2;							// 1 / sqrt(2)
 
-extern long double E;									// e
-extern long double LOG2_E;								// log_2(e)
-extern long double LOG10_E;								// log_10(e)
-extern long double LN_2;								// log_e(2)
-extern long double LN_10;								// log_e(10)
-extern long double SQRT_2;								// sqrt(2)
-extern long double _1_SQRT_2;							// 1/sqrt(2)
+extern const long double E;								// e
+extern const long double LOG2_E;						// log_2(e)
+extern const long double LOG10_E;						// log_10(e)
+extern const long double LN_2;							// log_e(2)
+extern const long double LN_10;							// log_e(10)
+extern const long double SQRT_2;						// sqrt(2)
+extern const long double _1_SQRT_2;						// 1/sqrt(2)
 
-extern float _Complex E;								// e
-extern float _Complex LOG2_E;							// log_2(e)
-extern float _Complex LOG10_E;							// log_10(e)
-extern float _Complex LN_2;								// log_e(2)
-extern float _Complex LN_10;							// log_e(10)
-extern float _Complex SQRT_2;							// sqrt(2)
-extern float _Complex _1_SQRT_2;						// 1 / sqrt(2)
+extern const float _Complex E;							// e
+extern const float _Complex LOG2_E;						// log_2(e)
+extern const float _Complex LOG10_E;					// log_10(e)
+extern const float _Complex LN_2;						// log_e(2)
+extern const float _Complex LN_10;						// log_e(10)
+extern const float _Complex SQRT_2;						// sqrt(2)
+extern const float _Complex _1_SQRT_2;					// 1 / sqrt(2)
 
-extern double _Complex E;								// e
-extern double _Complex LOG2_E;							// log_2(e)
-extern double _Complex LOG10_E;							// log_10(e)
-extern double _Complex LN_2;							// log_e(2)
-extern double _Complex LN_10;							// log_e(10)
-extern double _Complex SQRT_2;							// sqrt(2)
-extern double _Complex _1_SQRT_2;						// 1 / sqrt(2)
+extern const double _Complex E;							// e
+extern const double _Complex LOG2_E;					// log_2(e)
+extern const double _Complex LOG10_E;					// log_10(e)
+extern const double _Complex LN_2;						// log_e(2)
+extern const double _Complex LN_10;						// log_e(10)
+extern const double _Complex SQRT_2;					// sqrt(2)
+extern const double _Complex _1_SQRT_2;					// 1 / sqrt(2)
 
-extern long double _Complex E;							// e
-extern long double _Complex LOG2_E;						// log_2(e)
-extern long double _Complex LOG10_E;					// log_10(e)
-extern long double _Complex LN_2;						// log_e(2)
-extern long double _Complex LN_10;						// log_e(10)
-extern long double _Complex SQRT_2;						// sqrt(2)
-extern long double _Complex _1_SQRT_2;					// 1 / sqrt(2)
+extern const long double _Complex E;					// e
+extern const long double _Complex LOG2_E;				// log_2(e)
+extern const long double _Complex LOG10_E;				// log_10(e)
+extern const long double _Complex LN_2;					// log_e(2)
+extern const long double _Complex LN_10;				// log_e(10)
+extern const long double _Complex SQRT_2;				// sqrt(2)
+extern const long double _Complex _1_SQRT_2;			// 1 / sqrt(2)
 
 // Local Variables: //
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision 69c5c001921edf7a77ff0c53ac4f0d0e8044b405)
+++ src/InitTweak/FixGlobalInit.cc	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -112,4 +112,20 @@
 			} // if
 			if ( Statement * ctor = ctorInit->ctor ) {
+				// Translation 1: Add this attribute on the global declaration:
+				//    __attribute__((section (".data#")))
+				// which makes gcc put the global in the data section,
+				// so that the global is writeable (via a const cast) in the init function.
+				// The trailing # is an injected assembly comment, to suppress the "a" in
+				//    .section .data,"a"
+				//    .section .data#,"a"
+				// to avoid assembler warning "ignoring changed section attributes for .data"
+				Type *strLitT = new PointerType( Type::Qualifiers( ),
+					new BasicType( Type::Qualifiers( ), BasicType::Char ) );
+				std::list< Expression * > attr_params;
+				attr_params.push_back( 
+					new ConstantExpr( Constant( strLitT, "\".data#\"", std::nullopt ) ) );
+				objDecl->attributes.push_back(new Attribute("section", attr_params));
+				// Translation 2: Move the initizliation off the global declaration,
+				// into the startup function.
 				initStatements.push_back( ctor );
 				objDecl->init = nullptr;
Index: tests/.expect/const-init.txt
===================================================================
--- tests/.expect/const-init.txt	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
+++ tests/.expect/const-init.txt	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -0,0 +1,1 @@
+done
Index: tests/.expect/limits.txt
===================================================================
--- tests/.expect/limits.txt	(revision 69c5c001921edf7a77ff0c53ac4f0d0e8044b405)
+++ tests/.expect/limits.txt	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -1,2 +1,2 @@
 limits.cfa: In function '_X4mainFi_iPPKc__1':
-limits.cfa:151:9: note: #pragma message: Compiled
+limits.cfa:154:9: note: #pragma message: Compiled
Index: tests/const-init.cfa
===================================================================
--- tests/const-init.cfa	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
+++ tests/const-init.cfa	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -0,0 +1,48 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2020 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// const-init.cfa -- tests of initializing constants
+//
+// Author           : Michael Brooks
+// Created On       : Tue Oct 06 22:00:00 2020
+// Last Modified By : Michael Brooks
+// Last Modified On : Tue Oct 06 22:00:00 2020
+// Update Count     : 1
+//
+
+/*
+
+This test shows non-crashing of generated code for constants with interesting initizers.
+The potential for these to crash is compiler dependent.
+
+There are two cases:
+1. static constants in one compilation unit (tested here)
+2. extern constants across compilation units (tested by libcfa being loadable, specifically
+   the constant declarations in libcfa/src/limits.cfa, which almost every test exercises,
+   including "hello;" but notably, the "limits" test does not exercise it because that test
+   is compile-only)
+
+Crashes that we have obsrved (#182 and build failures September 2020) are because the libcfa
+initialization is writing to a global variable (which the declaring program wants typed as 
+constant), while the compiler has placed this global in a read-only section.
+
+Compiler dependence includes:
+
+                          Case 1           Case 2
+GCC-6  on Ubuntu 16.04    Never crashed    Never crashed
+GCC-8  on both            Has crashed      Never crashed
+GCC-10 on Ubuntu 20.04    Has crashed      Has crashed
+
+For this test case to fail, with most other tests passing, would be a situation only ever
+observed with GCC-8.
+
+*/
+
+static const char foo = -1;
+
+int main() {
+    printf("done\n");
+}
Index: tests/limits.cfa
===================================================================
--- tests/limits.cfa	(revision 69c5c001921edf7a77ff0c53ac4f0d0e8044b405)
+++ tests/limits.cfa	(revision 6fbe9a5fd01aa79d7b7dd2fbf7e7b4656c1b7bc7)
@@ -13,4 +13,7 @@
 // Update Count     : 10
 //
+
+// Note: For testing the ability to load the constants defined in libcfa/src/limits.cfa,
+// see discussion in test const-init.
 
 #include <limits.hfa>
