DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hxh57738897
今日帖子: 25
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/4/20 11:29:45
标题:
又一个严重的编译器BUG 浏览:2490
加入我的收藏
楼主: https://quality.embarcadero.com/browse/RSP-20389
----------------------------------------------
-
作者:
男 go_on (go_on) ★☆☆☆☆ -
盒子活跃会员
2018/4/20 11:31:47
1楼: 问题不能一并贴过来?大家好快速看一下影响大小,和自己有没有关系
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/4/20 11:43:24
2楼: 贴个网址也很难么?
type
  TMySubdata = record
    Value: SmallInt;
  end;
 
  TMyData = record
    Subvalue1: TMySubdata;
    Subvalue2: TMySubdata;
  end;
 
function GetValue: TMyData;
begin
  Result.Subvalue1.Value := 1;
  Result.Subvalue2.Value := 2;
end;
 
var
  sv: TMySubdata;
begin
  sv := GetValue.Subvalue2;
  if sv.Value = 2 then
    Writeln('PASS')
  else
    Writeln('FAIL');
end.

win32 显示 FAIL  win64正常
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/4/20 11:46:31
3楼: 另一个问题也很严重,编译器BUG
https://quality.embarcadero.com/browse/RSP-20357

const 
  testPtr = pointer ($FFFFFFFF);

procedure abc1 (p : tobject); register;
begin 
  if p <> testPtr
    then raise exception.create ('Unexpected Error in <abc1> !')
end;

procedure abc2 (p : tobject); stdcall;
begin 
  if p <> testPtr then 
    raise exception.create ('Unexpected Error in <abc2> !')
end;

procedure TForm10.vvclButton1Click(Sender: TObject);
begin 
  abc1 (testPtr);
  abc2 (testPtr)
end;

出现异常
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/4/20 11:47:23
4楼: 不靠谱不是一点两点。
VCL之后,编译器也要被整得千疮百孔了。
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2018/4/20 11:58:22
5楼: https://quality.embarcadero.com/browse/RSP-20388
范型:
Try to compile following code:
type
  TRec<T> = record
    Value: T;
  end;
 
  TCls = class
  public
    Rec: TRec<TRec<Integer>>;
  end;
 
end.
Expected: compiles
Actual: E2564 Undefined type 'TRec<T>'

这就是范型。
----------------------------------------------
-
作者:
男 helyna (Person) ★☆☆☆☆ -
普通会员
2018/4/20 13:09:54
6楼: smallint的那个BUG,XE也有,这BUG都这么多年了吗
----------------------------------------------
-
作者:
男 a5824 (Return) ★☆☆☆☆ -
普通会员
2018/4/20 14:38:57
7楼: 一直要把这个项目干黄为止按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/20 20:36:05
8楼: 参考 cb 4k 的问题,人多,就有机会解决。没人关心的话,几百年也不一定解决。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jim1985cn (jim) ★☆☆☆☆ -
普通会员
2018/4/20 20:47:29
7楼: 这算是bug么,我d6测的也是FAIL...
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/4/21 1:07:05
9楼: 真受不了Delphi的编译器。TMyData总共4个字节,所以GetValue的返回值放在eax寄存器中。但32位编译器居然认为GetValue.Subvalue1和GetValue.Subvalue2都在eax的低16位即ax内。狂晕!~~~
此帖子包含附件:
PNG 图像
大小:25.5K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/4/21 1:11:27
10楼: 对第一个程序,64位编译器是对的,call GetValue后先shr eax,$10再取ax的结果
此帖子包含附件:
PNG 图像
大小:30.0K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/4/21 1:30:50
11楼: 第二个程序的bug是Delphi10 Tokyo版新引入的,至少Seattle版还没有。stdcall调用约定时,对取值为-1的常量参数,32位编译器居然往栈里压0。狂晕!~~~~
此帖子包含附件:
PNG 图像
大小:13.2K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/4/21 1:36:32
12楼: 程序二的64位编译器也没问题。64位下只有register调用约定,stdcall也被映射为register。所以都是ecx置为$ffffffff来传参。
此帖子包含附件:
PNG 图像
大小:13.3K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/4/21 1:41:57
13楼: 另外,从Win32目标平台的Delphi编译器生成的目标码的优化程度来看,建议Embarcadero尽快把该目标平台编译器的backend换成LLVM。
Win64目标平台的Delphi编译器生成的目标码的优化程度多少好一些。
----------------------------------------------
-
作者:
男 bigboy2050 (bigboy2050) ★☆☆☆☆ -
普通会员
2018/4/21 18:13:44
14楼: 比Delphi10 Tokyo 低的 哪个版本的 delphi bug少一点?

delphi xe 的 bug 多吗?
----------------------------------------------
kittyapp
作者:
男 boyla (土著巫师) ★☆☆☆☆ -
普通会员
2018/4/21 18:26:29
14楼: 验证了第一个问题:https://quality.embarcadero.com/browse/RSP-20389
WIN32平台确实有问题,WIN64平台没有问题,ANDROID平台也没有问题。
把smallint 换成byte类型也有问题,换成integer或int64问题消失,使用 packed record字节对齐方式也是出错。

另用C++Builder也测试了,三个平台都没有问题。

上述测试都是建立多平台应用,我再测试下VCL框架下有没有问题。
----------------------------------------------
妹聊的不是BUG是追求,哥写的不是CODE是梦想。
作者:
男 boyla (土著巫师) ★☆☆☆☆ -
普通会员
2018/4/21 18:47:19
15楼: 针对第一个问题,VCL框架下,WIN32平台也测试了一下,同样有问题,WIN64平台还是没有问题。其它与上面测试雷同。

(C++Builder没有再测试VCL框架应用,猜想和多平台框架一样没有问题)

这个问题对DELPHI编译器影响很大 :(

上述两个验证测试IDE是最新版本: 10.2.3.2631。
静候10.2.4(不幸被猜中),RAD Studio版本历史多次说明SP4才会稳定下来哈,请允许无耐的做个鬼脸哈 :)。
----------------------------------------------
妹聊的不是BUG是追求,哥写的不是CODE是梦想。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/22 16:36:58
16楼: RSP-20171 之所以很快 FIX,到底是因为 运气好,还是因为投票的人太多?
在 2000 人群 全体一下,到底对 EMB FIX Bug 有没有促进作?
至今都是未解之谜。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 boyla (土著巫师) ★☆☆☆☆ -
普通会员
2018/4/22 18:25:11
17楼: 验证了另一个问题:https://quality.embarcadero.com/browse/RSP-20357

多平台应用,WIN32有问题,WIN64没有问题,ANDROID平台因为测试代码使用$FFFFFFFF地址,不容许越权访问直接被系统拒掉了,应该与编译器没有直接关系。
----------------------------------------------
妹聊的不是BUG是追求,哥写的不是CODE是梦想。
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行109.375毫秒 RSS