Rebase.
[official-gcc.git] / libgfortran / ChangeLog
blob77afd166d075aadd615032e6515e47238312990b
1 2014-08-04  Jakub Jelinek  <jakub@redhat.com>
3         * runtime/memory.c (xmallocarray): Avoid division for the common case.
5 2014-07-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
7         PR libgfortran/61632
8         * io/format.c (format_error): Avoid invalid string pointer by
9         using the fortran string length values to generate error string.
10         (parse_format): Allocate the null terminator for the format
11         string.
13 2014-07-12  Tobias Burnus  <burnus@net-b.de>
15         * caf/libcaf.h (_gfortran_caf_atomic_define,
16         _gfortran_caf_atomic_ref, _gfortran_caf_atomic_op,
17         _gfortran_caf_atomic_cas): New prototypes.
18         * caf/single.c (_gfortran_caf_atomic_define,
19         _gfortran_caf_atomic_ref, _gfortran_caf_atomic_op,
20         _gfortran_caf_atomic_cas): New functions.
22 2014-07-10  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
24         * config/fpu-*.h (get_fpu_rounding_mode, set_fpu_rounding_mode,
25         support_fpu_rounding_mode): Clean up, mark unreachable code as such.
27 2014-07-09  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
29         * libgfortran.h (support_fpu_underflow_control,
30         get_fpu_underflow_mode, set_fpu_underflow_mode): New prototypes.
31         * config/fpu-*.h (support_fpu_underflow_control,
32         get_fpu_underflow_mode, set_fpu_underflow_mode):
33         New functions.
34         * ieee/ieee_arithmetic.F90: Support underflow control.
36 2014-07-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
38         * config/fpu-sysv.h (get_fpu_rounding_mode): Use FP_RN, FP_RP,
39         FP_RM, FP_RZ unconditionally.
40         (set_fpu_rounding_mode): Likewise.
42 2014-07-07  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
44         * libgfortran.h: Assume __GNUC__.
46 2014-07-07  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
48         * runtime/stop.c: Use C11 _Noreturn.
49         * libgfortran.h: Use C11 _Noreturn in prototypes.
50         Move REALPART, IMAGPART and COMPLEX_ASSIGN macros...
51         * intrinsics/c99_functions.c: ... here.
53 2014-07-07  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
55         * config/fpu-387.h, config/fpu-aix.h, config/fpu-sysv.h,
56         config/fpu-glibc.h: Use static assertions.
58 2014-07-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
60         * configure, config.h.in: Regenerate.
61         * config/fpu-sysv.h: Include <assert.h>.
63 2014-07-02  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
65         * config/fpu-glibc.h: Fix comment about FE_DENORMAL.
67 2014-07-02  Uros Bizjak  <ubizjak@gmail.com>
69         * configure.host (ieee_flags): Add -mieee for alpha*.
71         * config/fpu-glibc.h (support_fpu_rounding_mode): Correctly handle
72         GFC_FPE_UPWARD, GFC_FPE_DOWNWARD and GFC_FPE_TOWARDZERO.
73         * config/fpu-aix.h (support_fpu_rounding_mode): Ditto.
75 2014-06-29  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
77         * config/fpu-387.h (my_fenv_t): Amend structure so it also works
78         on mingw32.
80 2014-06-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
82         PR libgfortran/61640
83         * io/list_read.c (next_char_internal): Adjust the read length to
84         a single wide character. (eat_spaces): Add missing paren.
85         * io/unix.c (mem_read4): Use the correct mem_alloc function for
86         wide character internal reads.
88 2014-06-28  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
90         PR fortran/29383
91         * configure.host: Add checks for IEEE support, rework priorities.
92         * configure.ac: Define IEEE_SUPPORT, check for fpsetsticky and
93         fpresetsticky.
94         * configure: Regenerate.
95         * Makefile.am: Build new ieee files, install IEEE_* modules.
96         * Makefile.in: Regenerate.
97         * gfortran.map (GFORTRAN_1.6): Add new symbols.
98         * libgfortran.h (get_fpu_trap_exceptions, set_fpu_trap_exceptions,
99         support_fpu_trap, set_fpu_except_flags, support_fpu_flag,
100         support_fpu_rounding_mode, get_fpu_state, set_fpu_state): New
101         prototypes.
102         * config/fpu-*.h (get_fpu_trap_exceptions,
103         set_fpu_trap_exceptions, support_fpu_trap, set_fpu_except_flags,
104         support_fpu_flag, support_fpu_rounding_mode, get_fpu_state,
105         set_fpu_state): New functions.
106         * ieee/ieee_features.F90: New file.
107         * ieee/ieee_exceptions.F90: New file.
108         * ieee/ieee_arithmetic.F90: New file.
109         * ieee/ieee_helper.c: New file.
111 2014-06-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
113         PR libgfortran/61499
114         * io/list_read.c (eat_spaces): Use a 'for' loop instead of
115         'while' loop to skip the loop if there are no bytes left in the
116         string. Only seek if actual spaces can be skipped.
118 2014-06-25  Tobias Burnus  <burnus@net-b.de>
120         * caf/single.c (assign_char4_from_char1, assign_char1_from_char4,
121         convert_type): New static functions.
122         (_gfortran_caf_get, _gfortran_caf_send): Use them.
124 2014-06-19  Tobias Burnus  <burnus@net-b.de>
126         * caf/single.c (_gfortran_caf_co_sum, _gfortran_caf_co_max,
127         _gfortran_caf_co_min): Fix stat setting.
129 2014-06-17  Tobias Burnus  <burnus@net-b.de>
131         * caf/libcaf.h (gfc_descriptor_t): New typedef.
132         (caf_vector_t): Update.
133         (_gfortran_caf_co_sum, _gfortran_caf_co_max, _gfortran_caf_co_min):
134         Remove vector-subscript argument.
135         (_gfortran_caf_co_send, _gfortran_caf_co_get,
136         _gfortran_caf_co_sendget): New.
137         * caf/single.c (_gfortran_caf_co_sum, _gfortran_caf_co_max,
138         _gfortran_caf_co_min): Remove vector-subscript argument.
139         (_gfortran_caf_co_send, _gfortran_caf_co_get,
140         _gfortran_caf_co_sendget): New.
142 2014-06-17  Janne Blomqvist  <jb@gcc.gnu.org>
144         * libgfortran.h (xmallocarray): New prototype.
145         * runtime/memory.c (xmallocarray): New function.
146         (xcalloc): Check for nonzero separately instead of multiplying.
147         * generated/*.c: Regenerated.
148         * intrinsics/cshift0.c (cshift0): Call xmallocarray instead of
149         xmalloc.
150         * intrinsics/eoshift0.c (eoshift0): Likewise.
151         * intrinsics/eoshift2.c (eoshift2): Likewise.
152         * intrinsics/pack_generic.c (pack_internal): Likewise.
153         (pack_s_internal): Likewise.
154         * intrinsics/reshape_generic.c (reshape_internal): Likewise.
155         * intrinsics/spread_generic.c (spread_internal): Likewise.
156         (spread_internal_scalar): Likewise.
157         * intrinsics/string_intrinsics_inc.c (string_trim): Likewise.
158         (string_minmax): Likewise.
159         * intrinsics/transpose_generic.c (transpose_internal): Likewise.
160         * intrinsics/unpack_generic.c (unpack_internal): Likewise.
161         * io/list_read.c (nml_touch_nodes): Don't cast xmalloc return value.
162         * io/transfer.c (st_set_nml_var): Call xmallocarray instead of
163         xmalloc.
164         * io/unit.c (get_internal_unit): Likewise.
165         (filename_from_unit): Don't cast xmalloc return value.
166         * io/write.c (nml_write_obj): Likewise, formatting.
167         * m4/bessel.m4 (bessel_jn_r'rtype_kind`): Call xmallocarray
168         instead of xmalloc.
169         (besse_yn_r'rtype_kind`): Likewise.
170         * m4/cshift1.m4 (cshift1): Likewise.
171         * m4/eoshift1.m4 (eoshift1): Likewise.
172         * m4/eoshift3.m4 (eoshift3): Likewise.
173         * m4/iforeach.m4: Likewise.
174         * m4/ifunction.m4: Likewise.
175         * m4/ifunction_logical.m4 (name`'rtype_qual`_'atype_code):
176         Likewise.
177         * m4/in_pack.m4 (internal_pack_'rtype_ccode`): Likewise.
178         * m4/matmul.m4 (matmul_'rtype_code`): Likewise.
179         * m4/matmull.m4 (matmul_'rtype_code`): Likewise.
180         * m4/pack.m4 (pack_'rtype_code`): Likewise.
181         * m4/reshape.m4 (reshape_'rtype_ccode`): Likewise.
182         * m4/shape.m4 (shape_'rtype_kind`): Likewise.
183         * m4/spread.m4 (spread_'rtype_code`): Likewise.
184         (spread_scalar_'rtype_code`): Likewise.
185         * m4/transpose.m4 (transpose_'rtype_code`): Likewise.
186         * m4/unpack.m4 (unpack0_'rtype_code`): Likewise.
187         (unpack1_'rtype_code`): Likewise.
188         * runtime/convert_char.c (convert_char1_to_char4): Likewise.
189         (convert_char4_to_char1): Simplify.
190         * runtime/environ.c (init_unformatted): Call xmallocarray instead
191         of xmalloc.
192         * runtime/in_pack_generic.c (internal_pack): Likewise.
194 2014-06-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
196         PR libfortran/60468
197         * configure.ac: Include <math.h> when checking for fp_except_t
198         and fp_rnd_t types.
199         * configure: Regenerate.
201 2014-06-08  Janne Blomqvist  <jb@gcc.gnu.org>
203         PR libfortran/56981
204         * io/unix.h (struct stream_vtable): Add new member function,
205         markeor.
206         (smarkeor): New inline function.
207         (flush_if_unbuffered): Remove prototype.
208         * io/unix.c (raw_markeor): New function.
209         (raw_vtable): Initialize markeor member.
210         (buf_markeor): New function.
211         (buf_vtable): Initialize markeor member.
212         (mem_vtable): Likewise.
213         (mem4_vtable): Likewise.
214         (flush_if_unbuffered): Remove function.
215         * io/transfer.c (next_record): Call smarkeor instead of
216         flush_if_unbuffered.
218 2014-05-27  Uros Bizjak  <ubizjak@gmail.com>
220         * intrinsics/getcwd.c: Include stdlib.h.
222 2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>
224         * libgfortran.h (xrealloc): New prototype.
225         * runtime/memory.c (xrealloc): New function.
226         * io/fbuf.c (fbuf_alloc): Use xrealloc.
227         * io/list_read.c (push_char_default): Likewise.
228         (push_char4): Likewise.
230 2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>
232         PR libfortran/61310
233         * intrinsics/ctime.c (strctime): Rename to gf_ctime, use snprintf
234         instead of strftime.
235         (fdate): Use gf_ctime.
236         (fdate_sub): Likewise.
237         (ctime): Likewise.
238         (ctime_sub): Likewise.
240 2014-05-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
242         PR libgfortran/55117
243         * io/list_read.c (extended_look_ahead): New helper function to
244         scan the namelist name and look for matches with the new '+'
245         extended type parent indicator.  (str_comp_extended): New
246         helper function to compare the namelist name with the varname
247         namelist. (find_nml_name): Use the new helper functions to match
248         the extended type varnames.
250 2014-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu>
252         PR libfortran/61173
253         * io/list_read.c (eat_spaces): If the next character pointed to
254         is a space, don't seek, must be at the end.
256 2014-05-23  Hans-Peter Nilsson  <hp@axis.com>
258         * configure.ac [with_newlib] (HAVE_STRNLEN, HAVE_STRNDUP): Define.
259         * configure: Regenerate.
261 2014-05-23  Janne Blomqvist  <jb@gcc.gnu.org>
263         PR libfortran/60324
264         * runtime/string.c: Include stdlib.h.
266 2014-05-22  Janne Blomqvist  <jb@gcc.gnu.org>
268         PR libfortran/60324
269         * config.h.in: Regenerated.
270         * configure: Regenerated.
271         * configure.ac (AC_CHECK_FUNCS_ONCE): Check for strnlen and
272         strndup.
273         * libgfortran.h (fc_strdup): New prototype.
274         * runtime/string.c (strnlen): New fallback function.
275         (strndup): New fallback function.
276         (fc_strdup): New function.
277         * io/close.c (st_close): Use fc_strdup.
278         * io/open.c (new_unit): Likewise.
279         (already_open): Likewise.
280         * io/unit.c (filename_from_unit): Likewise.
281         * io/unix.c (unpack_filename): Remove function.
282         (regular_file): Rename to regular_file2, add path argument.
283         (regular_file): New function calling regular_file2.
284         (compare_file_filename): Use fc_strdup.
285         (find_file): Likewise.
286         (delete_file): Likewise.
287         (file_exists): Likewise.
288         (file_size): Likewise.
289         (inquire_sequential): Likewise.
290         (inquire_direct): Likewise.
291         (inquire_formatted): Likewise.
292         (inquire_access): Likewise.
293         * io/unix.h (unpack_filename): Remove prototype.
294         * runtime/main.c (please_free_exe_path_when_done): Change type to
295         bool.
296         (store_exe_path): Use malloced buffer, grow as needed.
298 2014-05-17  Jerry DeLisle  <jvdelisle@gcc.gnu>
300         PR libfortran/52539
301         * io/io.h (gfc_unit): New function pointers *next_char_fn_ptr
302         and *push_char_fn_ptr.
303         *io/list_read.c (next_char): Create macro with this name to call
304         the new function pointer. Split the original next_char function
305         into three new functions. (next_char_default, next_char_internal,
306         next_char_utf8): New functions. (push_char): Create macro with
307         this name to call new function pointer. Split the original
308         push_char into three new functions. (push_char_default,
309         push_char_internal, push_char4): New functions. (set_workers):
310         New function to initilize the function pointers depending on the
311         type of IO to be performed. (list_formatted_read_scalar): Use
312         set_workers function. (finish_list_read): Likewise.
313         (namelist_read): Likewise.
314         (nml_get_obj_data): Use push_char_default.
316 2014-05-16  Janne Blomqvist  <jb@gcc.gnu.org>
318         PR libfortran/61187
319         * io/unix.c (raw_close): Check if s->fd is -1.
320         (fd_to_stream): Check return value of fstat(), handle error.
322 2014-05-12  Janne Blomqvist  <jb@gcc.gnu.org>
324         PR libfortran/61035
325         * intrinsics/getcwd.c (getcwd_i4_sub): Avoid potentially large
326         stack allocation, avoid extra copying in the common case.
328 2014-05-12  Janne Blomqvist  <jb@gcc.gnu.org>
330         * configure.ac (AM_CFLAGS): Use -std=gnu11.
331         (CFLAGS): Likewise.
332         * configure: Regenerated.
334 2014-05-11  Tobias Burnus  <burnus@net-b.de>
336         * caf/libcaf.h (_gfortran_caf_num_images): Change type of
337         second argument to int.
338         * caf/mpi.c (_gfortran_caf_num_images): Ditto.
339         * caf/single.c (_gfortran_caf_num_images): Ditto.
341 2014-05-08  Tobias Burnus  <burnus@net-b.de>
343         * caf/libcaf.h (caf_vector_t, _gfortran_caf_co_sum,
344         _gfortran_caf_co_min, _gfortran_caf_co_max): Declare
345         * caf/single.c
347 2014-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu>
349         PR libfortran/61049
350         * io/list_read.c (list_formatted_read_scalar): Use eat_separator
351         and delete extraneous code.
353 2014-04-30  Tobias Burnus  <burnus@net-b.de>
355         * caf/libcaf.h (_gfortran_caf_this_image, _gfortran_caf_num_images):
356         New prototypes.
357         (_gfortran_caf_init): Change prototype.
358         (mpi_token_t): New typedef.
359         (TOKEN): New define.
360         * caf/mpi.c (_gfortran_caf_this_image, _gfortran_caf_num_images):
361         New functions.
362         (_gfortran_caf_init): Update.
363         (_gfortran_caf_finalize, _gfortran_caf_register,
364         _gfortran_caf_deregister): Use mpi_token_t.
365         * caf/single.c (_gfortran_caf_this_image, _gfortran_caf_num_images):
366         New functions.
367         (_gfortran_caf_init): Update.
368         (_gfortran_caf_finalize, _gfortran_caf_register,
369         _gfortran_caf_deregister): Use mpi_token_t, simplify.
371 2014-04-26  Jerry DeLisle  <jvdelisle@gcc.gnu>
373         PR libfortran/52539
374         * io/list_read.c: Add uchar typedef. (push_char4): New function
375         to save kind=4 character. (next_char_utf8): New function to read
376         a single UTF-8 encoded character value. (read_chracter): Update
377         to use the new functions for reading UTF-8 strings.
378         (list_formatted_read_scalar): Update to handle list directed
379         reads of UTF-8 strings. (nml_read_obj): Likewise update for
380         UTF-8 strings in namelists.
381         * io/write.c (nml_write_obj): Add kind=4 character support for
382         namelist writes.
384 2014-04-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
386         * configure.ac: Quote usage of ac_cv_func_clock_gettime in if test.
387         * configure: Regenerate.
389 2014-04-22  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
391         * config/fpu-387.h [__sun__ && __svr4__]: Remove SSE execution
392         check.
394 2014-04-11  Jerry DeLisle  <jvdelisle@gcc.gnu>
396         PR libfortran/60810
397         io/unit.c (is_trim_ok): If internal unit is array, do not trim.
399 2014-03-21  Jerry DeLisle  <jvdelisle@gcc.gnu>
401         PR libfortran/60148
402         * io/transfer.c (data_transfer_init): If std= was specified, set
403         delim status to DELIM_NONE of no other was specified.
405 2014-03-18  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
407         * configure.ac: Check for presence of fcntl.
408         * configure: Regenerate.
409         * config.h.in: Regenerate.
410         * io/unix.c (set_close_on_exec): Check for HAVE_FCNTL.
412 2014-03-17  Jerry DeLisle  <jvdelisle@gcc.gnu>
414         PR libfortran/48600
415         * io/list_read.c (list_formatted_read_scalar): Do not use
416         eat_separator. Explicitly set the comma and end-of-line flags.
417         Check for END condition from finish_separator.
419 2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
421         PR libfortran/58324
422         * io/list_read.c (finish_list_read): Read one character to check
423         for the end of the file.  If it is the end, then issue the file
424         end error message.  If not, use eat_line to reach the end
425         without giving error.  The next attempt to read will then
426         issue the error as described above.
428 2014-03-12  Jerry DeLisle  <jvdelisle@gcc.gnu>
430         PR libfortran/38199
431         * io/read.c (read_decimal): Quickly skip spaces to avoid calls
432         to next_char.
433         * io/unit.c (is_trim_ok): New helper function to check various
434         conditions to see if its OK to trim the internal unit string.
435         (get_internal_unit): Use LEN_TRIM to shorten selected internal
436         unit strings for optimizing READ. Enable this optimization for
437         formatted READ.
438         * io/list_read.c (finish_list_read): Don't call eat_line for
439         internal units.
441 2014-03-08  Jerry DeLisle  <jvdelisle@gcc.gnu>
443         PR libfortran/38199
444         * io/list_read.c (next_char): Mark unlikely error checks.
445         (eat_spaces): For character array reading, skip ahead over
446         spaces rather than call next_char multiple times.
448 2014-03-08  Tobias Burnus  <burnus@net-b.de>
450         * libgfortran.h (unlikely, likely): Add usage comment.
452 2014-03-08  Dominique d'Humieres  <dominiq@lps.ens.fr>
454         PR libgfortran/60128
455         * io/write_float.def (output_float): Remove unused variable
456         nzero_real. Replace a double space with a single one.
457         (determine_en_precision): Fix wrong handling of the EN format.
459 2014-03-03  Jerry DeLisle  <jvdelisle@gcc.gnu>
461         PR libfortran/60148
462         * io/inquire.c (inquire_via_unit): In the case of
463         DELIM_UNSPECIFIED set inquire return string to "NONE".
464         * io/list_read.c (read_character): In the case of DELIM_NONE and
465         namelists, complete the character read using the namelist
466         variable length.
467         * io/open.c (new_unit): Don't set delim status to none if not
468         specified so that DELIM_UNSPECIFIED can be used later.
469         * io/transfer.c (data_transfer_init): For namelist I/O, if the
470         unit delim status is unspecified set the current status to quote.
471         Otherwise, set current status to the unit status.
472         * io/unit.c (get_internel_unit, init_unit): Remember to set
473         flags_delim initially to DELIM_UNSPECIFIED so defaults come out
474         correctly.
475         * io/write.c (write_character): Add a new function argument
476         "mode" to signify that raw output is to be used vs output with
477         delimiters. If the mode is set to DELIM (1) proceed with
478         delimiters. (list_formatted_write_scalar): Write the separator
479         only if a delimiter was previously specified. Update the call to
480         write_character with the mode argument given.
481         (namelist_write_newline): Use the mode argument. (nml_write_obj):
482         Use the mode argument. Remove use of tmp_delim. Write the
483         semi-colon or comma correctly only when needed with using
484         delimiters. Cleanup whitespace.
485         (namelist_write): If delim is not specified in namelist I/O,
486         default to using quotes. Get rid of the tmp_delim variable and
487         use the new mode argument in write_character.
489 2014-02-21  Tobias Burnus  <burnus@net-b.de>
491         PR fortran/60286
492         * libgfortran/io/inquire.c (yes, no): New static const char vars.
493         (inquire_via_unit): Use them. Use OPEN mode instead of using
494         POSIX's access to query about write=, read= and readwrite=.
496 2014-01-20  Jerry DeLisle  <jvdelisle@gcc.gnu>
497             Dominique d'Humieres  <dominiq@lps.ens.fr>
499         * io/write_float.def (output_float): Remove inadvertent test
500         code from previous patch.
502 2014-01-19  Jerry DeLisle  <jvdelisle@gcc.gnu>
503             Dominique d'Humieres  <dominiq@lps.ens.fr>
505         PR libfortran/59771
506         PR libfortran/59774
507         PR libfortran/59836
508         * io/write_float.def (output_float): Fix wrong handling of the
509         Fw.0 format.
510         (output_float_FMT_G_): Fixes rounding issues with -m32.
512 2014-01-11  Jerry DeLisle  <jvdelisle@gcc.gnu>
513             Dominique d'Humieres  <dominiq@lps.ens.fr>
514             Steven G. Kargl  <kargl@gcc.gnu.org>
516         PR libfortran/59700
517         PR libfortran/59764
518         * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
519         unused bit. Define new variable line_buffer_pos.
520         * io/list_read.c (free_saved, next_char, l_push_char,
521         read_logical, read_real): Replace use of item_count with
522         line_buffer_pos for line_buffer look ahead.
523         (read_logical, read_integer, parse_real, read_real, check_type):
524         Adjust location of free_line to after generating error messages
525         to retain the correct item count for the message.
527 2014-01-02  Richard Sandiford  <rdsandiford@googlemail.com>
529         Update copyright years
531 Copyright (C) 2013-2014 Free Software Foundation, Inc.
533 Copying and distribution of this file, with or without modification,
534 are permitted in any medium without royalty provided the copyright
535 notice and this notice are preserved.