This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Tested on i686-linux. Committed on mainline.
An instantiation of unchecked_conversion creates a wrapper package for
the function, whose return type is a subtype that renames the actual.
This patch uses the actual for the subsequent unchecked_conversion, rather
than the internal subtype. This is both semantically correct, and prevents
spurious errors in gigi, when the of the unchecked conversion is operand
to a binary operation.
Test case: the following must compile quietly:
with Ada.Unchecked_Conversion;
package Pkg is
use Ada;
type Node_Rec(<>) is limited private;
package Node_Types is
type SCIL_Node is private;
type Decl_Region is private;
private
type SCIL_Node is access all Node_Rec;
for SCIL_Node'Storage_Size use 0;
type Decl_Region is new SCIL_Node;
end Node_Types;
type SCIL_Node is new Node_Types.SCIL_Node;
type Decl_Region is new Node_Types.Decl_Region;
function "+" (Node: Decl_Region) return SCIL_Node;
private
type Node_Rec (B : Boolean) is record null; end record;
type Node_Ptr is access all Node_Rec;
function From_Node_Ptr is new Unchecked_Conversion (Node_Ptr, Decl_Region);
end Pkg;
package body Pkg is
function "+" (Node: Decl_Region) return SCIL_Node is
function Cast is new Unchecked_Conversion (Decl_Region, SCIL_Node);
begin
if (Node /= From_Node_Ptr(null)) then null; end if;
return Cast(Node);
end "+";
end Pkg;
2005-03-08 Ed Schonberg <schonberg@adacore.com>
* exp_intr.adb (Expand_Unc_Conversion): As a target type, use the type
that appears in the instantiation rather than the internal subtype
generated in the wrapper package, to avoid anomalies in gigi when the
target is derived from a private type whose full view is an access type.
Attachment:
difs.16
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |