summaryrefslogtreecommitdiff
path: root/compiler/ncgld.pas
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-07-29 14:03:31 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-07-29 14:03:31 +0000
commitdd656012aee70d2948940738c2e73ca8f7140459 (patch)
tree8b7c37f3d405635fa91fdb5c460ea040460c6493 /compiler/ncgld.pas
parent92b6e39184c4b7779967b407e88f2762e4b83fdd (diff)
downloadfpc-dd656012aee70d2948940738c2e73ca8f7140459.tar.gz
* have tcgrttinode use the indirect RTTI labels if necessary
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@34224 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/ncgld.pas')
-rw-r--r--compiler/ncgld.pas13
1 files changed, 10 insertions, 3 deletions
diff --git a/compiler/ncgld.pas b/compiler/ncgld.pas
index 559ac9557f..b5c98f17ed 100644
--- a/compiler/ncgld.pas
+++ b/compiler/ncgld.pas
@@ -1456,15 +1456,22 @@ implementation
*****************************************************************************}
procedure tcgrttinode.pass_generate_code;
+ var
+ indirect : boolean;
begin
+ indirect := (tf_supports_packages in target_info.flags) and
+ (target_info.system in systems_indirect_var_imports) and
+ (cs_imported_data in current_settings.localswitches) and
+ (rttidef.owner.moduleid<>current_module.moduleid);
+
location_reset_ref(location,LOC_CREFERENCE,OS_NO,sizeof(pint));
case rttidatatype of
rdt_normal:
- location.reference.symbol:=RTTIWriter.get_rtti_label(rttidef,rttitype,false);
+ location.reference.symbol:=RTTIWriter.get_rtti_label(rttidef,rttitype,indirect);
rdt_ord2str:
- location.reference.symbol:=RTTIWriter.get_rtti_label_ord2str(rttidef,rttitype,false);
+ location.reference.symbol:=RTTIWriter.get_rtti_label_ord2str(rttidef,rttitype,indirect);
rdt_str2ord:
- location.reference.symbol:=RTTIWriter.get_rtti_label_str2ord(rttidef,rttitype,false);
+ location.reference.symbol:=RTTIWriter.get_rtti_label_str2ord(rttidef,rttitype,indirect);
end;
end;