From Jason Turner

[support.signal]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmptzo0g9qx/{from.md → to.md} +4 -261
tmp/tmptzo0g9qx/{from.md → to.md} RENAMED
@@ -6,10 +6,13 @@ invocation of the signal handler so installed.
6
  A *plain lock-free atomic operation* is an invocation of a function `f`
7
  from [[atomics]], such that:
8
 
9
  - `f` is the function `atomic_is_lock_free()`, or
10
  - `f` is the member function `is_lock_free()`, or
 
 
 
11
  - `f` is a non-static member function invoked on an object `A`, such
12
  that `A.is_lock_free()` yields `true`, or
13
  - `f` is a non-member function, and for every pointer-to-atomic argument
14
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
15
 
@@ -23,12 +26,11 @@ An evaluation is *signal-safe* unless it includes one of the following:
23
  - an access to an object with thread storage duration;
24
  - a `dynamic_cast` expression;
25
  - throwing of an exception;
26
  - control entering a *try-block* or *function-try-block*;
27
  - initialization of a variable with static storage duration requiring
28
- dynamic initialization ([[basic.start.dynamic]], [[stmt.dcl]]) [^36];
29
- or
30
  - waiting for the completion of the initialization of a variable with
31
  static storage duration [[stmt.dcl]].
32
 
33
  A signal handler invocation has undefined behavior if it includes an
34
  evaluation that is not signal-safe.
@@ -37,264 +39,5 @@ The function `signal` is signal-safe if it is invoked with the first
37
  argument equal to the signal number corresponding to the signal that
38
  caused the invocation of the handler.
39
 
40
  See also: ISO C 7.14
41
 
42
- <!-- Link reference definitions -->
43
- [alg.c.library]: algorithms.md#alg.c.library
44
- [alloc.errors]: #alloc.errors
45
- [atomics]: atomics.md#atomics
46
- [bad.alloc]: #bad.alloc
47
- [bad.cast]: #bad.cast
48
- [bad.exception]: #bad.exception
49
- [bad.typeid]: #bad.typeid
50
- [basic.align]: basic.md#basic.align
51
- [basic.def.odr]: basic.md#basic.def.odr
52
- [basic.fundamental]: basic.md#basic.fundamental
53
- [basic.life]: basic.md#basic.life
54
- [basic.start.dynamic]: basic.md#basic.start.dynamic
55
- [basic.start.term]: basic.md#basic.start.term
56
- [basic.stc.dynamic]: basic.md#basic.stc.dynamic
57
- [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
58
- [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
59
- [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
60
- [c.locales]: localization.md#c.locales
61
- [c.malloc]: utilities.md#c.malloc
62
- [c.math.abs]: numerics.md#c.math.abs
63
- [c.math.rand]: numerics.md#c.math.rand
64
- [c.mb.wcs]: strings.md#c.mb.wcs
65
- [cfloat.syn]: #cfloat.syn
66
- [class.mem]: class.md#class.mem
67
- [class.prop]: class.md#class.prop
68
- [class.spaceship]: class.md#class.spaceship
69
- [climits.syn]: #climits.syn
70
- [cmp]: #cmp
71
- [cmp.alg]: #cmp.alg
72
- [cmp.categories]: #cmp.categories
73
- [cmp.categories.pre]: #cmp.categories.pre
74
- [cmp.common]: #cmp.common
75
- [cmp.concept]: #cmp.concept
76
- [cmp.partialord]: #cmp.partialord
77
- [cmp.result]: #cmp.result
78
- [cmp.strongord]: #cmp.strongord
79
- [cmp.weakord]: #cmp.weakord
80
- [compare.syn]: #compare.syn
81
- [complex]: numerics.md#complex
82
- [concept.totallyordered]: concepts.md#concept.totallyordered
83
- [constraints]: library.md#constraints
84
- [conv.ptr]: expr.md#conv.ptr
85
- [conv.qual]: expr.md#conv.qual
86
- [conv.rank]: basic.md#conv.rank
87
- [coroutine.handle]: #coroutine.handle
88
- [coroutine.handle.compare]: #coroutine.handle.compare
89
- [coroutine.handle.con]: #coroutine.handle.con
90
- [coroutine.handle.export.import]: #coroutine.handle.export.import
91
- [coroutine.handle.hash]: #coroutine.handle.hash
92
- [coroutine.handle.noop]: #coroutine.handle.noop
93
- [coroutine.handle.noop.address]: #coroutine.handle.noop.address
94
- [coroutine.handle.noop.observers]: #coroutine.handle.noop.observers
95
- [coroutine.handle.noop.promise]: #coroutine.handle.noop.promise
96
- [coroutine.handle.noop.resumption]: #coroutine.handle.noop.resumption
97
- [coroutine.handle.observers]: #coroutine.handle.observers
98
- [coroutine.handle.promise]: #coroutine.handle.promise
99
- [coroutine.handle.resumption]: #coroutine.handle.resumption
100
- [coroutine.noop]: #coroutine.noop
101
- [coroutine.noop.coroutine]: #coroutine.noop.coroutine
102
- [coroutine.promise.noop]: #coroutine.promise.noop
103
- [coroutine.syn]: #coroutine.syn
104
- [coroutine.traits]: #coroutine.traits
105
- [coroutine.traits.primary]: #coroutine.traits.primary
106
- [coroutine.trivial.awaitables]: #coroutine.trivial.awaitables
107
- [cpp.line]: cpp.md#cpp.line
108
- [cpp17.nullablepointer]: #cpp17.nullablepointer
109
- [csetjmp.syn]: #csetjmp.syn
110
- [csignal.syn]: #csignal.syn
111
- [cstdarg.syn]: #cstdarg.syn
112
- [cstddef.syn]: #cstddef.syn
113
- [cstdint]: #cstdint
114
- [cstdint.syn]: #cstdint.syn
115
- [cstdlib.syn]: #cstdlib.syn
116
- [customization.point.object]: library.md#customization.point.object
117
- [dcl.fct.def.coroutine]: dcl.md#dcl.fct.def.coroutine
118
- [dcl.fct.default]: dcl.md#dcl.fct.default
119
- [dcl.init.list]: dcl.md#dcl.init.list
120
- [defns.expression-equivalent]: library.md#defns.expression-equivalent
121
- [denorm.style]: #denorm.style
122
- [except.handle]: except.md#except.handle
123
- [except.nested]: #except.nested
124
- [except.spec]: except.md#except.spec
125
- [except.terminate]: except.md#except.terminate
126
- [except.uncaught]: except.md#except.uncaught
127
- [exception]: #exception
128
- [exception.syn]: #exception.syn
129
- [exception.terminate]: #exception.terminate
130
- [expr.add]: expr.md#expr.add
131
- [expr.await]: expr.md#expr.await
132
- [expr.call]: expr.md#expr.call
133
- [expr.context]: expr.md#expr.context
134
- [expr.delete]: expr.md#expr.delete
135
- [expr.dynamic.cast]: expr.md#expr.dynamic.cast
136
- [expr.eq]: expr.md#expr.eq
137
- [expr.new]: expr.md#expr.new
138
- [expr.prim.lambda]: expr.md#expr.prim.lambda
139
- [expr.rel]: expr.md#expr.rel
140
- [expr.sizeof]: expr.md#expr.sizeof
141
- [expr.spaceship]: expr.md#expr.spaceship
142
- [expr.typeid]: expr.md#expr.typeid
143
- [fp.style]: #fp.style
144
- [get.new.handler]: #get.new.handler
145
- [get.terminate]: #get.terminate
146
- [hardware.interference]: #hardware.interference
147
- [initializer.list.syn]: #initializer.list.syn
148
- [intro.multithread]: basic.md#intro.multithread
149
- [library.c]: library.md#library.c
150
- [limits.syn]: #limits.syn
151
- [locale.codecvt]: localization.md#locale.codecvt
152
- [multibyte.strings]: library.md#multibyte.strings
153
- [new.badlength]: #new.badlength
154
- [new.delete]: #new.delete
155
- [new.delete.array]: #new.delete.array
156
- [new.delete.dataraces]: #new.delete.dataraces
157
- [new.delete.placement]: #new.delete.placement
158
- [new.delete.single]: #new.delete.single
159
- [new.handler]: #new.handler
160
- [new.syn]: #new.syn
161
- [numeric.limits]: #numeric.limits
162
- [numeric.limits.members]: #numeric.limits.members
163
- [numeric.special]: #numeric.special
164
- [propagation]: #propagation
165
- [ptr.launder]: #ptr.launder
166
- [res.on.data.races]: library.md#res.on.data.races
167
- [round.style]: #round.style
168
- [set.new.handler]: #set.new.handler
169
- [set.terminate]: #set.terminate
170
- [source.location.syn]: #source.location.syn
171
- [stmt.dcl]: stmt.md#stmt.dcl
172
- [string.classes]: strings.md#string.classes
173
- [support]: #support
174
- [support.coroutine]: #support.coroutine
175
- [support.dynamic]: #support.dynamic
176
- [support.exception]: #support.exception
177
- [support.general]: #support.general
178
- [support.initlist]: #support.initlist
179
- [support.initlist.access]: #support.initlist.access
180
- [support.initlist.cons]: #support.initlist.cons
181
- [support.initlist.range]: #support.initlist.range
182
- [support.limits]: #support.limits
183
- [support.limits.general]: #support.limits.general
184
- [support.rtti]: #support.rtti
185
- [support.runtime]: #support.runtime
186
- [support.signal]: #support.signal
187
- [support.srcloc]: #support.srcloc
188
- [support.srcloc.class]: #support.srcloc.class
189
- [support.srcloc.cons]: #support.srcloc.cons
190
- [support.srcloc.current]: #support.srcloc.current
191
- [support.srcloc.obs]: #support.srcloc.obs
192
- [support.start.term]: #support.start.term
193
- [support.summary]: #support.summary
194
- [support.types]: #support.types
195
- [support.types.byteops]: #support.types.byteops
196
- [support.types.layout]: #support.types.layout
197
- [support.types.nullptr]: #support.types.nullptr
198
- [swappable.requirements]: library.md#swappable.requirements
199
- [temp.deduct]: temp.md#temp.deduct
200
- [temp.dep.constexpr]: temp.md#temp.dep.constexpr
201
- [temp.dep.expr]: temp.md#temp.dep.expr
202
- [temp.variadic]: temp.md#temp.variadic
203
- [terminate]: #terminate
204
- [terminate.handler]: #terminate.handler
205
- [type.info]: #type.info
206
- [typeinfo.syn]: #typeinfo.syn
207
- [uncaught.exceptions]: #uncaught.exceptions
208
- [unord.hash]: utilities.md#unord.hash
209
- [utility.arg.requirements]: library.md#utility.arg.requirements
210
- [version.syn]: #version.syn
211
-
212
- [^1]: Possible definitions include `0` and `0L`, but not `(void*)0`.
213
-
214
- [^2]: Note that `offsetof` is required to work as specified even if
215
- unary `operator&` is overloaded for any of the types involved.
216
-
217
- [^3]: Equivalent to `CHAR_MIN`, `SHRT_MIN`, `FLT_MIN`, `DBL_MIN`, etc.
218
-
219
- [^4]: Equivalent to `CHAR_MAX`, `SHRT_MAX`, `FLT_MAX`, `DBL_MAX`, etc.
220
-
221
- [^5]: `lowest()` is necessary because not all floating-point
222
- representations have a smallest (most negative) value that is the
223
- negative of the largest (most positive) finite value.
224
-
225
- [^6]: Equivalent to `FLT_MANT_DIG`, `DBL_MANT_DIG`, `LDBL_MANT_DIG`.
226
-
227
- [^7]: Equivalent to `FLT_DIG`, `DBL_DIG`, `LDBL_DIG`.
228
-
229
- [^8]: Equivalent to `FLT_RADIX`.
230
-
231
- [^9]: Distinguishes types with bases other than 2 (e.g. BCD).
232
-
233
- [^10]: Equivalent to `FLT_EPSILON`, `DBL_EPSILON`, `LDBL_EPSILON`.
234
-
235
- [^11]: Rounding error is described in LIA-1 Section 5.2.4 and Annex C
236
- Rationale Section C.5.2.4 — Rounding and rounding constants.
237
-
238
- [^12]: Equivalent to `FLT_MIN_EXP`, `DBL_MIN_EXP`, `LDBL_MIN_EXP`.
239
-
240
- [^13]: Equivalent to `FLT_MIN_10_EXP`, `DBL_MIN_10_EXP`,
241
- `LDBL_MIN_10_EXP`.
242
-
243
- [^14]: Equivalent to `FLT_MAX_EXP`, `DBL_MAX_EXP`, `LDBL_MAX_EXP`.
244
-
245
- [^15]: Equivalent to `FLT_MAX_10_EXP`, `DBL_MAX_10_EXP`,
246
- `LDBL_MAX_10_EXP`.
247
-
248
- [^16]: Required by LIA-1.
249
-
250
- [^17]: Required by LIA-1.
251
-
252
- [^18]: Required by LIA-1.
253
-
254
- [^19]: See ISO/IEC/IEEE 60559.
255
-
256
- [^20]: Required by LIA-1.
257
-
258
- [^21]: Required by LIA-1.
259
-
260
- [^22]: Required by LIA-1.
261
-
262
- [^23]: Required by LIA-1.
263
-
264
- [^24]: ISO/IEC/IEEE 60559:2011 is the same as IEEE 754-2008.
265
-
266
- [^25]: Required by LIA-1.
267
-
268
- [^26]: Required by LIA-1.
269
-
270
- [^27]: Required by LIA-1.
271
-
272
- [^28]: Refer to ISO/IEC/IEEE 60559. Required by LIA-1.
273
-
274
- [^29]: Equivalent to `FLT_ROUNDS`. Required by LIA-1.
275
-
276
- [^30]: A function is called for every time it is registered.
277
-
278
- [^31]: Objects with automatic storage duration are all destroyed in a
279
- program whose `main` function [[basic.start.main]] contains no
280
- objects with automatic storage duration and executes the call to
281
- `exit()`. Control can be transferred directly to such a `main`
282
- function by throwing an exception that is caught in `main`.
283
-
284
- [^32]: The macros `EXIT_FAILURE` and `EXIT_SUCCESS` are defined in
285
- `<cstdlib>`.
286
-
287
- [^33]: It is not the direct responsibility of `operator new[]` or
288
- `operator delete[]` to note the repetition count or element size of
289
- the array. Those operations are performed elsewhere in the array
290
- `new` and `delete` expressions. The array `new` expression, may,
291
- however, increase the `size` argument to `operator new[]` to obtain
292
- space to store supplemental information.
293
-
294
- [^34]: That is, `a < b`, `a == b`, and `a > b` might all be `false`.
295
-
296
- [^35]: Note that `va_start` is required to work as specified even if
297
- unary `operator&` is overloaded for the type of `parmN`.
298
-
299
- [^36]: Such initialization might occur because it is the first odr-use
300
- [[basic.def.odr]] of that variable.
 
6
  A *plain lock-free atomic operation* is an invocation of a function `f`
7
  from [[atomics]], such that:
8
 
9
  - `f` is the function `atomic_is_lock_free()`, or
10
  - `f` is the member function `is_lock_free()`, or
11
+ - `f` is a non-static member function of class `atomic_flag`, or
12
+ - `f` is a non-member function, and the first parameter of `f` has type
13
+ cv `atomic_flag*`, or
14
  - `f` is a non-static member function invoked on an object `A`, such
15
  that `A.is_lock_free()` yields `true`, or
16
  - `f` is a non-member function, and for every pointer-to-atomic argument
17
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
18
 
 
26
  - an access to an object with thread storage duration;
27
  - a `dynamic_cast` expression;
28
  - throwing of an exception;
29
  - control entering a *try-block* or *function-try-block*;
30
  - initialization of a variable with static storage duration requiring
31
+ dynamic initialization [[basic.start.dynamic]], [[stmt.dcl]][^34] ; or
 
32
  - waiting for the completion of the initialization of a variable with
33
  static storage duration [[stmt.dcl]].
34
 
35
  A signal handler invocation has undefined behavior if it includes an
36
  evaluation that is not signal-safe.
 
39
  argument equal to the signal number corresponding to the signal that
40
  caused the invocation of the handler.
41
 
42
  See also: ISO C 7.14
43