Browse Source

Accept aign larger than varalignmax but issue a warning

Pierre Muller 2 months ago
parent
commit
e3e1285c5d
1 changed files with 11 additions and 4 deletions
  1. 11 4
      compiler/ngenutil.pas

+ 11 - 4
compiler/ngenutil.pas

@@ -955,7 +955,7 @@ implementation
   class procedure tnodeutils.insertbssdata(sym: tstaticvarsym);
     var
       l : asizeint;
-      varalign : shortint;
+      varalign,wantedalign : shortint;
       storefilepos : tfileposinfo;
       list : TAsmList;
       sectype : TAsmSectiontype;
@@ -964,11 +964,18 @@ implementation
       storefilepos:=current_filepos;
       current_filepos:=sym.fileinfo;
       l:=sym.getsize;
-      varalign:=sym.vardef.alignment;
-      if (varalign=0) then
+      wantedalign:=sym.vardef.alignment;
+      if (wantedalign=0) then
         varalign:=var_align_size(l)
       else
-        varalign:=var_align(varalign);
+        begin
+          varalign:=var_align(wantedalign);
+          if (wantedalign>varalign) then
+            begin
+              varalign:=wantedalign;
+              Message1(scanner_w_alignment_large_than_max,sym.name);
+	    end;
+	end;
       asmtype:=AT_DATA;
       if tf_section_threadvars in target_info.flags then
         begin