www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20693] New: align(N): larger than 2^^30 causes unexpected

https://issues.dlang.org/show_bug.cgi?id=20693

          Issue ID: 20693
           Summary: align(N): larger than 2^^30 causes unexpected behavior
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: kubo39 gmail.com

Both 2^^30 and 2^^31 are integers positive power of 2, but forbidden.

----
// OK.
align(2 ^^ 30) struct S1 {};
pragma(msg, S1.sizeof);  // 1073741824LU

// Error: alignment must be an integer positive power of 2, not -2147483648.
align(2 ^^ 31) struct S2 {};

// Error: alignment must be an integer positive power of 2, not 0.
align(2 ^^ 32) struct S3 {};
---

2^^32 + 1 is not an integer positive power of 2, but allowed.

---
align(2 ^^ 32 + 1) struct S4 {};
pragma(msg, S4.sizeof);  // 1LU
----

--
Mar 22