From Jason Turner

[support.signal]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpbqbala44/{from.md → to.md} +81 -26
tmp/tmpbqbala44/{from.md → to.md} RENAMED
@@ -2,11 +2,11 @@
2
 
3
  A call to the function `signal` synchronizes with any resulting
4
  invocation of the signal handler so installed.
5
 
6
  A *plain lock-free atomic operation* is an invocation of a function `f`
7
- from Clause  [[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
@@ -14,32 +14,32 @@ from Clause  [[atomics]], such that:
14
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
15
 
16
  An evaluation is *signal-safe* unless it includes one of the following:
17
 
18
  - a call to any standard library function, except for plain lock-free
19
- atomic operations and functions explicitly identified as signal-safe.
20
  \[*Note 1*: This implicitly excludes the use of `new` and `delete`
21
  expressions that rely on a library-provided memory
22
  allocator. — *end note*]
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]]) [^35];
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.
35
 
36
  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
- 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
@@ -49,11 +49,10 @@ ISO C 7.14.
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]: basic.md#basic.start
55
  [basic.start.dynamic]: basic.md#basic.start.dynamic
56
  [basic.start.term]: basic.md#basic.start.term
57
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
58
  [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
59
  [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
@@ -62,75 +61,119 @@ ISO C 7.14.
62
  [c.malloc]: utilities.md#c.malloc
63
  [c.math.abs]: numerics.md#c.math.abs
64
  [c.math.rand]: numerics.md#c.math.rand
65
  [c.mb.wcs]: strings.md#c.mb.wcs
66
  [cfloat.syn]: #cfloat.syn
67
- [class]: class.md#class
68
- [class.free]: special.md#class.free
 
69
  [climits.syn]: #climits.syn
 
 
 
 
 
 
 
 
 
 
 
70
  [complex]: numerics.md#complex
 
71
  [constraints]: library.md#constraints
72
- [conv.ptr]: conv.md#conv.ptr
73
- [conv.qual]: conv.md#conv.qual
74
- [conv.rank]: conv.md#conv.rank
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  [csetjmp.syn]: #csetjmp.syn
76
  [csignal.syn]: #csignal.syn
77
  [cstdarg.syn]: #cstdarg.syn
78
  [cstddef.syn]: #cstddef.syn
79
  [cstdint]: #cstdint
80
  [cstdint.syn]: #cstdint.syn
81
  [cstdlib.syn]: #cstdlib.syn
 
 
 
82
  [dcl.init.list]: dcl.md#dcl.init.list
 
83
  [denorm.style]: #denorm.style
84
  [except.handle]: except.md#except.handle
85
  [except.nested]: #except.nested
86
- [except.special]: except.md#except.special
87
  [except.terminate]: except.md#except.terminate
88
  [except.uncaught]: except.md#except.uncaught
89
  [exception]: #exception
90
  [exception.syn]: #exception.syn
91
  [exception.terminate]: #exception.terminate
92
  [expr.add]: expr.md#expr.add
 
 
 
93
  [expr.delete]: expr.md#expr.delete
94
  [expr.dynamic.cast]: expr.md#expr.dynamic.cast
 
95
  [expr.new]: expr.md#expr.new
96
  [expr.prim.lambda]: expr.md#expr.prim.lambda
 
97
  [expr.sizeof]: expr.md#expr.sizeof
 
98
  [expr.typeid]: expr.md#expr.typeid
99
  [fp.style]: #fp.style
100
  [get.new.handler]: #get.new.handler
101
  [get.terminate]: #get.terminate
102
  [hardware.interference]: #hardware.interference
103
- [initializer_list.syn]: #initializer_list.syn
104
- [intro.memory]: intro.md#intro.memory
105
- [intro.multithread]: intro.md#intro.multithread
106
- [language.support]: #language.support
107
  [library.c]: library.md#library.c
108
  [limits.syn]: #limits.syn
109
  [locale.codecvt]: localization.md#locale.codecvt
110
- [memory]: utilities.md#memory
111
  [multibyte.strings]: library.md#multibyte.strings
112
  [new.badlength]: #new.badlength
113
  [new.delete]: #new.delete
114
  [new.delete.array]: #new.delete.array
115
  [new.delete.dataraces]: #new.delete.dataraces
116
  [new.delete.placement]: #new.delete.placement
117
  [new.delete.single]: #new.delete.single
118
  [new.handler]: #new.handler
119
  [new.syn]: #new.syn
120
- [nullablepointer.requirements]: library.md#nullablepointer.requirements
121
  [numeric.limits]: #numeric.limits
122
  [numeric.limits.members]: #numeric.limits.members
123
  [numeric.special]: #numeric.special
124
  [propagation]: #propagation
125
  [ptr.launder]: #ptr.launder
126
  [res.on.data.races]: library.md#res.on.data.races
127
  [round.style]: #round.style
128
  [set.new.handler]: #set.new.handler
129
  [set.terminate]: #set.terminate
 
130
  [stmt.dcl]: stmt.md#stmt.dcl
131
  [string.classes]: strings.md#string.classes
 
 
132
  [support.dynamic]: #support.dynamic
133
  [support.exception]: #support.exception
134
  [support.general]: #support.general
135
  [support.initlist]: #support.initlist
136
  [support.initlist.access]: #support.initlist.access
@@ -139,24 +182,34 @@ ISO C 7.14.
139
  [support.limits]: #support.limits
140
  [support.limits.general]: #support.limits.general
141
  [support.rtti]: #support.rtti
142
  [support.runtime]: #support.runtime
143
  [support.signal]: #support.signal
 
 
 
 
 
144
  [support.start.term]: #support.start.term
 
145
  [support.types]: #support.types
146
  [support.types.byteops]: #support.types.byteops
147
  [support.types.layout]: #support.types.layout
148
  [support.types.nullptr]: #support.types.nullptr
149
- [tab:lang.sup.lib.summary]: #tab:lang.sup.lib.summary
 
150
  [temp.dep.constexpr]: temp.md#temp.dep.constexpr
151
  [temp.dep.expr]: temp.md#temp.dep.expr
152
  [temp.variadic]: temp.md#temp.variadic
153
  [terminate]: #terminate
154
  [terminate.handler]: #terminate.handler
155
  [type.info]: #type.info
156
  [typeinfo.syn]: #typeinfo.syn
157
  [uncaught.exceptions]: #uncaught.exceptions
 
 
 
158
 
159
  [^1]: Possible definitions include `0` and `0L`, but not `(void*)0`.
160
 
161
  [^2]: Note that `offsetof` is required to work as specified even if
162
  unary `operator&` is overloaded for any of the types involved.
@@ -221,14 +274,14 @@ ISO C 7.14.
221
  [^29]: Equivalent to `FLT_ROUNDS`. Required by LIA-1.
222
 
223
  [^30]: A function is called for every time it is registered.
224
 
225
  [^31]: Objects with automatic storage duration are all destroyed in a
226
- program whose `main` function ([[basic.start.main]]) contains no
227
- automatic objects and executes the call to `exit()`. Control can be
228
- transferred directly to such a `main` function by throwing an
229
- exception that is caught in `main`.
230
 
231
  [^32]: The macros `EXIT_FAILURE` and `EXIT_SUCCESS` are defined in
232
  `<cstdlib>`.
233
 
234
  [^33]: It is not the direct responsibility of `operator new[]` or
@@ -236,10 +289,12 @@ ISO C 7.14.
236
  the array. Those operations are performed elsewhere in the array
237
  `new` and `delete` expressions. The array `new` expression, may,
238
  however, increase the `size` argument to `operator new[]` to obtain
239
  space to store supplemental information.
240
 
241
- [^34]: Note that `va_start` is required to work as specified even if
 
 
242
  unary `operator&` is overloaded for the type of `parmN`.
243
 
244
- [^35]: Such initialization might occur because it is the first odr-use (
245
- [[basic.def.odr]]) of that variable.
 
2
 
3
  A call to the function `signal` synchronizes with any resulting
4
  invocation of the signal handler so installed.
5
 
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
 
14
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
15
 
16
  An evaluation is *signal-safe* unless it includes one of the following:
17
 
18
  - a call to any standard library function, except for plain lock-free
19
+ atomic operations and functions explicitly identified as signal-safe;
20
  \[*Note 1*: This implicitly excludes the use of `new` and `delete`
21
  expressions that rely on a library-provided memory
22
  allocator. — *end note*]
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.
35
 
36
  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
 
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
 
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
 
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.
 
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
 
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.