diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-01-07 10:52:50 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-01-07 10:52:50 +0100 |
commit | c3831524bc0bf8d15bc95e26832a2a5e0752f9cc (patch) | |
tree | 24a17934b629bb46778ca5d90adbe1188eb86824 /gcc/ada/i-cpoint.adb | |
parent | 1a9ee22281e0902c673d3c2e4cb5b83e07786569 (diff) | |
download | gcc-c3831524bc0bf8d15bc95e26832a2a5e0752f9cc.zip gcc-c3831524bc0bf8d15bc95e26832a2a5e0752f9cc.tar.gz gcc-c3831524bc0bf8d15bc95e26832a2a5e0752f9cc.tar.bz2 |
[multiple changes]
2015-01-07 Tristan Gingold <gingold@adacore.com>
* i-cpoint.adb (Copy_Terminated_Array): Use Copy_Array to
handle overlap.
2015-01-07 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch3.adb (Analyze_Full_Type_Declaration): Do not
automatically set No_Strict_Aliasing on access types.
* fe.h (No_Strict_Aliasing_CP): Declare.
* gcc-interface/trans.c (gigi): Force flag_strict_aliasing to 0 if
No_Strict_Aliasing_CP is set.
2015-01-07 Johannes Kanig <kanig@adacore.com>
* sem_ch8.adb (Analyze_Subprogram_Renaming) do
not build function wrapper in gnatprove mode when the package
is externally axiomatized.
2015-01-07 Jose Ruiz <ruiz@adacore.com>
* a-reatim.adb (Time_Of): Reduce the number of spurious overflows in
intermediate computations when the parameters have different signs.
2015-01-07 Javier Miranda <miranda@adacore.com>
* exp_ch3.adb (Build_Init_Procedure): For derived types,
improve the code which takes care of identifying and moving to
the beginning of the init-proc the call to the init-proc of the
parent type.
From-SVN: r219287
Diffstat (limited to 'gcc/ada/i-cpoint.adb')
-rw-r--r-- | gcc/ada/i-cpoint.adb | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/gcc/ada/i-cpoint.adb b/gcc/ada/i-cpoint.adb index afcb96b..6b3c84d 100644 --- a/gcc/ada/i-cpoint.adb +++ b/gcc/ada/i-cpoint.adb @@ -143,23 +143,21 @@ package body Interfaces.C.Pointers is Limit : ptrdiff_t := ptrdiff_t'Last; Terminator : Element := Default_Terminator) is - S : Pointer := Source; - T : Pointer := Target; - L : ptrdiff_t := Limit; - + L : ptrdiff_t; + S : Pointer := Source; begin - if S = null or else T = null then + if Source = null then raise Dereference_Error; - - else - while L > 0 loop - T.all := S.all; - exit when T.all = Terminator; - Increment (T); - Increment (S); - L := L - 1; - end loop; end if; + + -- Compute array length (including the terminator) + L := 1; + while S.all /= Terminator and then L < Limit loop + L := L + 1; + Increment (S); + end loop; + + Copy_Array (Source, Target, L); end Copy_Terminated_Array; --------------- |