- Reverted r25269 and commented out r25261. The former one is wrong because it changes unit initialization order. The latter one causes RTL build failures on some targets, needs testing and likely RTL/makefiles patching.

git-svn-id: trunk@25271 -
This commit is contained in:
sergei 2013-08-16 15:17:25 +00:00
parent feaa006243
commit d11ec8ac47
2 changed files with 12 additions and 10 deletions

View File

@ -1078,10 +1078,13 @@ implementation
end;
single_type(pd.returndef,[stoAllowSpecialization]);
// Issue #24863, commented out for now because it breaks building of RTL and needs extensive
// testing and/or RTL patching.
{
if ((pd.returndef=cvarianttype) or (pd.returndef=colevarianttype)) and
not(cs_compilesystem in current_settings.moduleswitches) then
current_module.flags:=current_module.flags or uf_uses_variants;
}
if is_dispinterface(pd.struct) and not is_automatable(pd.returndef) then
Message1(type_e_not_automatable,pd.returndef.typename);

View File

@ -195,24 +195,20 @@ implementation
procedure maybeloadvariantsunit;
var
hp : tmodule;
load : boolean;
begin
{ Must not be called for units }
if current_module.is_unit then
InternalError(2013081601);
{ Do we need the variants unit? Skip this
for VarUtils unit for bootstrapping }
if (current_module.flags and uf_uses_variants=0) or
(current_module.modulename^='VARUTILS') then
exit;
{ Variants unit already loaded? }
load:=(current_module.flags and uf_uses_variants)<>0;
hp:=tmodule(loaded_units.first);
while assigned(hp) do
begin
if hp.modulename^='VARIANTS' then
exit;
if (hp.flags and uf_uses_variants)<>0 then
load:=true;
hp:=tmodule(hp.next);
end;
if (not load) then
exit;
{ Variants unit is not loaded yet, load it now }
Message(parser_w_implicit_uses_of_variants_unit);
AddUnit('variants');
@ -1162,6 +1158,9 @@ type
{ if an Objective-C module, generate rtti and module info }
MaybeGenerateObjectiveCImageInfo(current_module.globalsymtable,current_module.localsymtable);
{ do we need to add the variants unit? }
maybeloadvariantsunit;
{ generate rtti/init tables }
write_persistent_type_info(current_module.globalsymtable,true);
write_persistent_type_info(current_module.localsymtable,false);