[DTrace-devel] [PATCH 23/61] test: Need wider variables to hold 1<<63

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Jul 8 14:45:07 UTC 2022


From: Eugene Loh <eugene.loh at oracle.com>

DTrace has some peculiar -- arguably incorrect -- semantics for
integer types dating back to Solaris.  Consider 1<<63.  Normal C
rules would say this is a 4-byte int whose value is 0.  The DTrace
parser, however, treats it as the 8-byte integer 0x8000000000000000.
Subsequently, D uses the 8-byte value when assigning to an 8-byte
variable.  E.g.,
    long long x;
    x = 1 << 63;
stores 1<<63.  Nevertheless, D treat 1<<63 as a 4-byte expression.
E.g.,
    x = 1 << 63;
    trace(1 << 63);
will use a default 4-byte int for x and trace a 4-byte value of 0.

The tests addressed by this patch expect 8-byte increments but
use default-width int this->val variables.  There is no way a
4-byte int could produce a, say, 9223372036854775801 increment.

Declare this->val to be 8 bytes and properly set it to the intended
values.

The tests will still XFAIL, since support for aggregation keys
is missing.

The D semantics should perhaps be examined further, but this
patch at least fixes these particular tests.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>

sq Need wider variables
---
 test/unittest/aggs/tst.neglquant.d | 36 ++++++++++++++++--------------
 test/unittest/aggs/tst.negquant.d  | 24 +++++++++++---------
 2 files changed, 32 insertions(+), 28 deletions(-)

diff --git a/test/unittest/aggs/tst.neglquant.d b/test/unittest/aggs/tst.neglquant.d
index f67dd842..6629438b 100644
--- a/test/unittest/aggs/tst.neglquant.d
+++ b/test/unittest/aggs/tst.neglquant.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
  * Licensed under the Universal Permissive License v 1.0 as shown at
  * http://oss.oracle.com/licenses/upl.
  */
@@ -45,38 +45,40 @@ BEGIN
 	@["n-judah"] = lquantize(2, 0, 10, 1);
 }
 
+this long long val;
+
 BEGIN
 {
 	this->i = 1;
-	this->val = (1 << 63) - 1;
+	this->val = (((long long) 1) << 63) - 1;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["f-market"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 }
 
 BEGIN
@@ -93,35 +95,35 @@ BEGIN
 	 * this robustness on new ISAs very much depends on the precision
 	 * of the long double representation.
 	 */
-	this->val = (1 << 63) - 7;
+	this->val = (((long long) 1) << 63) - 7;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 
 	@["s-castro"] = lquantize(this->i, 0, 10, 1, this->val);
 	this->i++;
-	this->val = ((1 << 63) - 1) / this->i;
+	this->val = ((((long long) 1) << 63) - 1) / this->i;
 }
 
 BEGIN
diff --git a/test/unittest/aggs/tst.negquant.d b/test/unittest/aggs/tst.negquant.d
index 5a0268d1..78fa96ba 100644
--- a/test/unittest/aggs/tst.negquant.d
+++ b/test/unittest/aggs/tst.negquant.d
@@ -1,6 +1,6 @@
 /*
  * Oracle Linux DTrace.
- * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2022, Oracle and/or its affiliates. All rights reserved.
  * Licensed under the Universal Permissive License v 1.0 as shown at
  * http://oss.oracle.com/licenses/upl.
  */
@@ -45,48 +45,50 @@ BEGIN
 	@["n-judah"] = quantize(2);
 }
 
+this long long val;
+
 BEGIN
 {
 	this->i = 1;
-	this->val = (1 << 63) - 1;
+	this->val = (((long long) 1) << 63) - 1;
 
 	@["f-market"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["f-market"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["f-market"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["f-market"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 }
 
 BEGIN
 {
 	this->i = 1;
-	this->val = (1 << 63) - 4;
+	this->val = (((long long) 1) << 63) - 4;
 
 	@["s-castro"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["s-castro"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["s-castro"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 
 	@["s-castro"] = quantize(this->i, this->val);
 	this->i <<= 1;
-	this->val >>= 1;
+	this->val >>= ((long long) 1);
 }
 
 BEGIN
-- 
2.18.4




More information about the DTrace-devel mailing list