浏览代码

* Compiler error is now thrown if record alignment is not a power of 2 or is greater than 64.

J. Gareth "Curious Kit" Moreton 3 年之前
父节点
当前提交
971b8b9217
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      compiler/ptype.pas

+ 4 - 1
compiler/ptype.pas

@@ -1068,7 +1068,10 @@ implementation
            begin
              consume(_ID);
              alignment:=get_intconst.svalue;
-             if not(alignment in [1,2,4,8,16,32,64]) then
+             { "(alignment and not $7F) = 0" means it's between 0 and 127, and
+               PopCnt = 1 for powers of 2 }
+             if ((alignment and not $7F) <> 0) or (PopCnt(Byte(alignment))<>1) then
+               message(scanner_e_illegal_alignment_directive)
              else
                recst.recordalignment:=shortint(alignment);
            end;