with Ada.Text_IO; use Ada.Text_IO; procedure Builtins is type Word is mod 2**64; for Word'Size use 64; procedure Add_Overflow(A, B: Word; Result: out Word; Overflow: out Boolean) is C: aliased Word; function Builtin_Add_Overflow(X, Y : Word; Z: not null access Word) return Boolean; pragma Import (Intrinsic, Builtin_Add_Overflow, "__builtin_uaddl_overflow"); begin Overflow := Builtin_Add_Overflow(A, B, C'Access); Result := C; end Add_Overflow; O: Boolean := False; R: Word := 0; A, B: Word; begin A := Word'Value("34"); B := Word'Value("56"); Add_Overflow(A, B, R, O); Put_Line(R'Image & " " & O'Image); end Builtins;