http://d.puremagic.com/issues/show_bug.cgi?id=7396



--- Comment #20 from Iain Buclaw <ibuc...@ubuntu.com> 2012-01-31 06:24:46 PST 
---
I can't seem to get git working at work. :)



(In reply to comment #16)
> 
> Yes, I agree.  My proposal was the following.
> 
> // excerpt from parse.c line 503.
> case TOKalign:
> {   unsigned n;
> 
>   s = NULL;
>   nextToken();
>   if (token.value == TOKlparen)
>   {
>     nextToken();
>     if (token.value == TOKint32v && token.uns64value > 0)
>       n = (unsigned)token.uns64value;
>     else
>     {   error("positive integer expected, not %s", token.toChars());
>         n = 1;
>     }
>     nextToken();
>     check(TOKrparen);
>   }
>   else
> -    n = global.structalign; // default
> +    n = 0; // default
> 
>   a = parseBlock();
>   s = new AlignDeclaration(n, a);
>   break;
> }
> 
> Now the compiler can test for 0 and know that default alignment is required. 
> This removes the ambiguity with the current implementation.

Daniel, to add to that:

  if (token.value == TOKlparen)
  {
    nextToken();
    if (token.value == TOKint32v && token.uns64value > 0)
+   {
+     if (token.value & (token.value - 1))
+         error("align must be a power of 2, not %s", token.toChars());
      n = (unsigned)token.uns64value;
+   }
    else
    {   error("positive integer expected, not %s", token.toChars());
        n = 1;
    }
    nextToken();
    check(TOKrparen);
  }



And in attrib.h:
 struct AlignDeclaration : AttribDeclaration
 {
-    unsigned salign;
+    unsigned salign;          // alignment in effect, must be power of 2.
+                              // 0 if using default align for target.

     AlignDeclaration(unsigned sa, Dsymbols *decl);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to