gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-4121-g166848a


From: Arnold Robbins
Subject: [SCM] gawk branch, gawk-5.1-stable, updated. gawk-4.1.0-4121-g166848a
Date: Fri, 18 Sep 2020 07:43:11 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-5.1-stable has been updated
       via  166848a1579181875e6ac696fd004037441b6b75 (commit)
       via  d81c953f9b47f56ec477c75e95bd0976822545d1 (commit)
       via  c24a469a6cddbecda3a14721222e3f68d725bae5 (commit)
       via  154592f9db7af78cfa31ad6d64134ca89eed13b0 (commit)
       via  9c5fe8fd91d4ab84a893823d5076431fca893828 (commit)
      from  cde8fd84a060bcae8a5960897ff2e2de576b2e08 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=166848a1579181875e6ac696fd004037441b6b75

commit 166848a1579181875e6ac696fd004037441b6b75
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Sep 18 14:13:33 2020 +0300

    Update id.awk after doc update.

diff --git a/awklib/eg/prog/id.awk b/awklib/eg/prog/id.awk
index ff89203..ac6bd99 100644
--- a/awklib/eg/prog/id.awk
+++ b/awklib/eg/prog/id.awk
@@ -16,7 +16,7 @@
 # Options:
 #   -G Output all group ids as space separated numbers (ruid, euid, groups)
 #   -g Output only the euid as a number
-#   -n Ouput name instead of the numeric value (with -g/-G/-u)
+#   -n Output name instead of the numeric value (with -g/-G/-u)
 #   -r Output ruid/rguid instead of effective id
 #   -u Output only effective user id, as a number
 

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=d81c953f9b47f56ec477c75e95bd0976822545d1

commit d81c953f9b47f56ec477c75e95bd0976822545d1
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Sep 18 13:07:49 2020 +0300

    Minor doc updates.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 8ecc89e..4f48538 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2020-09-18         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawktexi.in: Minor fixes. Thanks to Antonio Columbo for
+       bringing them to my attention.
+
 2020-09-13         Arnold D. Robbins     <arnold@skeeve.com>
 
        * gawktexi.in (Egrep Program): Improve to be POSIX compliant.
diff --git a/doc/gawk.info b/doc/gawk.info
index 3624b8c..88c01fa 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -18168,7 +18168,7 @@ options, and then a 'usage()' function:
      # Options:
      #   -G Output all group ids as space separated numbers (ruid, euid, 
groups)
      #   -g Output only the euid as a number
-     #   -n Ouput name instead of the numeric value (with -g/-G/-u)
+     #   -n Output name instead of the numeric value (with -g/-G/-u)
      #   -r Output ruid/rguid instead of effective id
      #   -u Output only effective user id, as a number
 
@@ -36265,12 +36265,12 @@ Index
 * Kernighan, Brian, quotes <1>:          Getline/Pipe.        (line   6)
 * Kernighan, Brian, quotes <2>:          Concatenation.       (line   6)
 * Kernighan, Brian, quotes <3>:          Library Functions.   (line  12)
-* Kernighan, Brian <2>:                  Programs Exercises.  (line  26)
-* Kernighan, Brian <3>:                  BTL.                 (line   6)
-* Kernighan, Brian <4>:                  Contributors.        (line  12)
-* Kernighan, Brian <5>:                  Other Versions.      (line  13)
-* Kernighan, Brian <6>:                  Basic Data Typing.   (line  54)
-* Kernighan, Brian <7>:                  Glossary.            (line 204)
+* Kernighan, Brian, quotes <4>:          Programs Exercises.  (line  26)
+* Kernighan, Brian <2>:                  BTL.                 (line   6)
+* Kernighan, Brian <3>:                  Contributors.        (line  12)
+* Kernighan, Brian <4>:                  Other Versions.      (line  13)
+* Kernighan, Brian <5>:                  Basic Data Typing.   (line  54)
+* Kernighan, Brian <6>:                  Glossary.            (line 204)
 * kill command, dynamic profiling:       Profiling.           (line 194)
 * knights, jedi:                         Undocumented.        (line   6)
 * Kwok, Conrad:                          Contributors.        (line  35)
@@ -37957,271 +37957,271 @@ Node: Clones727022
 Node: Cut Program728246
 Node: Egrep Program738175
 Node: Id Program747185
-Node: Split Program757131
-Ref: Split Program-Footnote-1760589
-Node: Tee Program760718
-Node: Uniq Program763508
-Node: Wc Program771072
-Ref: Wc Program-Footnote-1775327
-Node: Miscellaneous Programs775421
-Node: Dupword Program776634
-Node: Alarm Program778664
-Node: Translate Program783519
-Ref: Translate Program-Footnote-1788084
-Node: Labels Program788354
-Ref: Labels Program-Footnote-1791705
-Node: Word Sorting791789
-Node: History Sorting795861
-Node: Extract Program798086
-Node: Simple Sed806140
-Node: Igawk Program809214
-Ref: Igawk Program-Footnote-1823545
-Ref: Igawk Program-Footnote-2823747
-Ref: Igawk Program-Footnote-3823869
-Node: Anagram Program823984
-Node: Signature Program827046
-Node: Programs Summary828293
-Node: Programs Exercises829507
-Ref: Programs Exercises-Footnote-1833637
-Node: Advanced Features833723
-Node: Nondecimal Data835713
-Node: Array Sorting837304
-Node: Controlling Array Traversal838004
-Ref: Controlling Array Traversal-Footnote-1846372
-Node: Array Sorting Functions846490
-Ref: Array Sorting Functions-Footnote-1851581
-Node: Two-way I/O851777
-Ref: Two-way I/O-Footnote-1859498
-Ref: Two-way I/O-Footnote-2859685
-Node: TCP/IP Networking859767
-Node: Profiling862885
-Node: Advanced Features Summary872199
-Node: Internationalization874043
-Node: I18N and L10N875523
-Node: Explaining gettext876210
-Ref: Explaining gettext-Footnote-1882102
-Ref: Explaining gettext-Footnote-2882287
-Node: Programmer i18n882452
-Ref: Programmer i18n-Footnote-1887401
-Node: Translator i18n887450
-Node: String Extraction888244
-Ref: String Extraction-Footnote-1889376
-Node: Printf Ordering889462
-Ref: Printf Ordering-Footnote-1892248
-Node: I18N Portability892312
-Ref: I18N Portability-Footnote-1894768
-Node: I18N Example894831
-Ref: I18N Example-Footnote-1898106
-Ref: I18N Example-Footnote-2898179
-Node: Gawk I18N898288
-Node: I18N Summary898937
-Node: Debugger900278
-Node: Debugging901278
-Node: Debugging Concepts901719
-Node: Debugging Terms903528
-Node: Awk Debugging906103
-Ref: Awk Debugging-Footnote-1907048
-Node: Sample Debugging Session907180
-Node: Debugger Invocation907714
-Node: Finding The Bug909100
-Node: List of Debugger Commands915574
-Node: Breakpoint Control916907
-Node: Debugger Execution Control920601
-Node: Viewing And Changing Data923963
-Node: Execution Stack927504
-Node: Debugger Info929141
-Node: Miscellaneous Debugger Commands933212
-Node: Readline Support938274
-Node: Limitations939170
-Node: Debugging Summary941724
-Node: Namespaces943003
-Node: Global Namespace944114
-Node: Qualified Names945512
-Node: Default Namespace946511
-Node: Changing The Namespace947252
-Node: Naming Rules948866
-Node: Internal Name Management950714
-Node: Namespace Example951756
-Node: Namespace And Features954318
-Node: Namespace Summary955753
-Node: Arbitrary Precision Arithmetic957230
-Node: Computer Arithmetic958717
-Ref: table-numeric-ranges962483
-Ref: table-floating-point-ranges962976
-Ref: Computer Arithmetic-Footnote-1963634
-Node: Math Definitions963691
-Ref: table-ieee-formats967007
-Ref: Math Definitions-Footnote-1967610
-Node: MPFR features967715
-Node: FP Math Caution969433
-Ref: FP Math Caution-Footnote-1970505
-Node: Inexactness of computations970874
-Node: Inexact representation971834
-Node: Comparing FP Values973194
-Node: Errors accumulate974435
-Node: Getting Accuracy975868
-Node: Try To Round978578
-Node: Setting precision979477
-Ref: table-predefined-precision-strings980174
-Node: Setting the rounding mode982004
-Ref: table-gawk-rounding-modes982378
-Ref: Setting the rounding mode-Footnote-1986309
-Node: Arbitrary Precision Integers986488
-Ref: Arbitrary Precision Integers-Footnote-1989663
-Node: Checking for MPFR989812
-Node: POSIX Floating Point Problems991286
-Ref: POSIX Floating Point Problems-Footnote-1995571
-Node: Floating point summary995609
-Node: Dynamic Extensions997799
-Node: Extension Intro999352
-Node: Plugin License1000618
-Node: Extension Mechanism Outline1001415
-Ref: figure-load-extension1001854
-Ref: figure-register-new-function1003419
-Ref: figure-call-new-function1004511
-Node: Extension API Description1006573
-Node: Extension API Functions Introduction1008286
-Ref: table-api-std-headers1010122
-Node: General Data Types1014371
-Ref: General Data Types-Footnote-11023001
-Node: Memory Allocation Functions1023300
-Ref: Memory Allocation Functions-Footnote-11027801
-Node: Constructor Functions1027900
-Node: API Ownership of MPFR and GMP Values1031366
-Node: Registration Functions1032679
-Node: Extension Functions1033379
-Node: Exit Callback Functions1038701
-Node: Extension Version String1039951
-Node: Input Parsers1040614
-Node: Output Wrappers1053335
-Node: Two-way processors1057847
-Node: Printing Messages1060112
-Ref: Printing Messages-Footnote-11061283
-Node: Updating ERRNO1061436
-Node: Requesting Values1062175
-Ref: table-value-types-returned1062912
-Node: Accessing Parameters1063848
-Node: Symbol Table Access1065085
-Node: Symbol table by name1065597
-Ref: Symbol table by name-Footnote-11068621
-Node: Symbol table by cookie1068749
-Ref: Symbol table by cookie-Footnote-11072934
-Node: Cached values1072998
-Ref: Cached values-Footnote-11076534
-Node: Array Manipulation1076687
-Ref: Array Manipulation-Footnote-11077778
-Node: Array Data Types1077815
-Ref: Array Data Types-Footnote-11080473
-Node: Array Functions1080565
-Node: Flattening Arrays1085063
-Node: Creating Arrays1092039
-Node: Redirection API1096806
-Node: Extension API Variables1099639
-Node: Extension Versioning1100350
-Ref: gawk-api-version1100779
-Node: Extension GMP/MPFR Versioning1102510
-Node: Extension API Informational Variables1104138
-Node: Extension API Boilerplate1105211
-Node: Changes from API V11109185
-Node: Finding Extensions1110757
-Node: Extension Example1111316
-Node: Internal File Description1112114
-Node: Internal File Ops1116194
-Ref: Internal File Ops-Footnote-11127544
-Node: Using Internal File Ops1127684
-Ref: Using Internal File Ops-Footnote-11130067
-Node: Extension Samples1130341
-Node: Extension Sample File Functions1131870
-Node: Extension Sample Fnmatch1139519
-Node: Extension Sample Fork1141006
-Node: Extension Sample Inplace1142224
-Node: Extension Sample Ord1145849
-Node: Extension Sample Readdir1146685
-Ref: table-readdir-file-types1147574
-Node: Extension Sample Revout1148641
-Node: Extension Sample Rev2way1149230
-Node: Extension Sample Read write array1149970
-Node: Extension Sample Readfile1151912
-Node: Extension Sample Time1153007
-Node: Extension Sample API Tests1154759
-Node: gawkextlib1155251
-Node: Extension summary1158169
-Node: Extension Exercises1161871
-Node: Language History1163113
-Node: V7/SVR3.11164769
-Node: SVR41166921
-Node: POSIX1168355
-Node: BTL1169736
-Node: POSIX/GNU1170465
-Node: Feature History1176243
-Node: Common Extensions1192562
-Node: Ranges and Locales1193845
-Ref: Ranges and Locales-Footnote-11198461
-Ref: Ranges and Locales-Footnote-21198488
-Ref: Ranges and Locales-Footnote-31198723
-Node: Contributors1198946
-Node: History summary1204943
-Node: Installation1206323
-Node: Gawk Distribution1207267
-Node: Getting1207751
-Node: Extracting1208714
-Node: Distribution contents1210352
-Node: Unix Installation1216832
-Node: Quick Installation1217514
-Node: Shell Startup Files1219928
-Node: Additional Configuration Options1221017
-Node: Configuration Philosophy1223332
-Node: Non-Unix Installation1225701
-Node: PC Installation1226161
-Node: PC Binary Installation1226999
-Node: PC Compiling1227434
-Node: PC Using1228551
-Node: Cygwin1232104
-Node: MSYS1233328
-Node: VMS Installation1233930
-Node: VMS Compilation1234721
-Ref: VMS Compilation-Footnote-11235950
-Node: VMS Dynamic Extensions1236008
-Node: VMS Installation Details1237693
-Node: VMS Running1239946
-Node: VMS GNV1244225
-Node: VMS Old Gawk1244960
-Node: Bugs1245431
-Node: Bug address1246094
-Node: Usenet1249076
-Node: Maintainers1250080
-Node: Other Versions1251265
-Node: Installation summary1258353
-Node: Notes1259562
-Node: Compatibility Mode1260356
-Node: Additions1261138
-Node: Accessing The Source1262063
-Node: Adding Code1263500
-Node: New Ports1269719
-Node: Derived Files1274094
-Ref: Derived Files-Footnote-11279754
-Ref: Derived Files-Footnote-21279789
-Ref: Derived Files-Footnote-31280387
-Node: Future Extensions1280501
-Node: Implementation Limitations1281159
-Node: Extension Design1282369
-Node: Old Extension Problems1283513
-Ref: Old Extension Problems-Footnote-11285031
-Node: Extension New Mechanism Goals1285088
-Ref: Extension New Mechanism Goals-Footnote-11288452
-Node: Extension Other Design Decisions1288641
-Node: Extension Future Growth1290754
-Node: Notes summary1291360
-Node: Basic Concepts1292518
-Node: Basic High Level1293199
-Ref: figure-general-flow1293481
-Ref: figure-process-flow1294166
-Ref: Basic High Level-Footnote-11297467
-Node: Basic Data Typing1297652
-Node: Glossary1300980
-Node: Copying1332865
-Node: GNU Free Documentation License1370408
-Node: Index1395528
+Node: Split Program757132
+Ref: Split Program-Footnote-1760590
+Node: Tee Program760719
+Node: Uniq Program763509
+Node: Wc Program771073
+Ref: Wc Program-Footnote-1775328
+Node: Miscellaneous Programs775422
+Node: Dupword Program776635
+Node: Alarm Program778665
+Node: Translate Program783520
+Ref: Translate Program-Footnote-1788085
+Node: Labels Program788355
+Ref: Labels Program-Footnote-1791706
+Node: Word Sorting791790
+Node: History Sorting795862
+Node: Extract Program798087
+Node: Simple Sed806141
+Node: Igawk Program809215
+Ref: Igawk Program-Footnote-1823546
+Ref: Igawk Program-Footnote-2823748
+Ref: Igawk Program-Footnote-3823870
+Node: Anagram Program823985
+Node: Signature Program827047
+Node: Programs Summary828294
+Node: Programs Exercises829508
+Ref: Programs Exercises-Footnote-1833638
+Node: Advanced Features833724
+Node: Nondecimal Data835714
+Node: Array Sorting837305
+Node: Controlling Array Traversal838005
+Ref: Controlling Array Traversal-Footnote-1846373
+Node: Array Sorting Functions846491
+Ref: Array Sorting Functions-Footnote-1851582
+Node: Two-way I/O851778
+Ref: Two-way I/O-Footnote-1859499
+Ref: Two-way I/O-Footnote-2859686
+Node: TCP/IP Networking859768
+Node: Profiling862886
+Node: Advanced Features Summary872200
+Node: Internationalization874044
+Node: I18N and L10N875524
+Node: Explaining gettext876211
+Ref: Explaining gettext-Footnote-1882103
+Ref: Explaining gettext-Footnote-2882288
+Node: Programmer i18n882453
+Ref: Programmer i18n-Footnote-1887402
+Node: Translator i18n887451
+Node: String Extraction888245
+Ref: String Extraction-Footnote-1889377
+Node: Printf Ordering889463
+Ref: Printf Ordering-Footnote-1892249
+Node: I18N Portability892313
+Ref: I18N Portability-Footnote-1894769
+Node: I18N Example894832
+Ref: I18N Example-Footnote-1898107
+Ref: I18N Example-Footnote-2898180
+Node: Gawk I18N898289
+Node: I18N Summary898938
+Node: Debugger900279
+Node: Debugging901279
+Node: Debugging Concepts901720
+Node: Debugging Terms903529
+Node: Awk Debugging906104
+Ref: Awk Debugging-Footnote-1907049
+Node: Sample Debugging Session907181
+Node: Debugger Invocation907715
+Node: Finding The Bug909101
+Node: List of Debugger Commands915575
+Node: Breakpoint Control916908
+Node: Debugger Execution Control920602
+Node: Viewing And Changing Data923964
+Node: Execution Stack927505
+Node: Debugger Info929142
+Node: Miscellaneous Debugger Commands933213
+Node: Readline Support938275
+Node: Limitations939171
+Node: Debugging Summary941725
+Node: Namespaces943004
+Node: Global Namespace944115
+Node: Qualified Names945513
+Node: Default Namespace946512
+Node: Changing The Namespace947253
+Node: Naming Rules948867
+Node: Internal Name Management950715
+Node: Namespace Example951757
+Node: Namespace And Features954319
+Node: Namespace Summary955754
+Node: Arbitrary Precision Arithmetic957231
+Node: Computer Arithmetic958718
+Ref: table-numeric-ranges962484
+Ref: table-floating-point-ranges962977
+Ref: Computer Arithmetic-Footnote-1963635
+Node: Math Definitions963692
+Ref: table-ieee-formats967008
+Ref: Math Definitions-Footnote-1967611
+Node: MPFR features967716
+Node: FP Math Caution969434
+Ref: FP Math Caution-Footnote-1970506
+Node: Inexactness of computations970875
+Node: Inexact representation971835
+Node: Comparing FP Values973195
+Node: Errors accumulate974436
+Node: Getting Accuracy975869
+Node: Try To Round978579
+Node: Setting precision979478
+Ref: table-predefined-precision-strings980175
+Node: Setting the rounding mode982005
+Ref: table-gawk-rounding-modes982379
+Ref: Setting the rounding mode-Footnote-1986310
+Node: Arbitrary Precision Integers986489
+Ref: Arbitrary Precision Integers-Footnote-1989664
+Node: Checking for MPFR989813
+Node: POSIX Floating Point Problems991287
+Ref: POSIX Floating Point Problems-Footnote-1995572
+Node: Floating point summary995610
+Node: Dynamic Extensions997800
+Node: Extension Intro999353
+Node: Plugin License1000619
+Node: Extension Mechanism Outline1001416
+Ref: figure-load-extension1001855
+Ref: figure-register-new-function1003420
+Ref: figure-call-new-function1004512
+Node: Extension API Description1006574
+Node: Extension API Functions Introduction1008287
+Ref: table-api-std-headers1010123
+Node: General Data Types1014372
+Ref: General Data Types-Footnote-11023002
+Node: Memory Allocation Functions1023301
+Ref: Memory Allocation Functions-Footnote-11027802
+Node: Constructor Functions1027901
+Node: API Ownership of MPFR and GMP Values1031367
+Node: Registration Functions1032680
+Node: Extension Functions1033380
+Node: Exit Callback Functions1038702
+Node: Extension Version String1039952
+Node: Input Parsers1040615
+Node: Output Wrappers1053336
+Node: Two-way processors1057848
+Node: Printing Messages1060113
+Ref: Printing Messages-Footnote-11061284
+Node: Updating ERRNO1061437
+Node: Requesting Values1062176
+Ref: table-value-types-returned1062913
+Node: Accessing Parameters1063849
+Node: Symbol Table Access1065086
+Node: Symbol table by name1065598
+Ref: Symbol table by name-Footnote-11068622
+Node: Symbol table by cookie1068750
+Ref: Symbol table by cookie-Footnote-11072935
+Node: Cached values1072999
+Ref: Cached values-Footnote-11076535
+Node: Array Manipulation1076688
+Ref: Array Manipulation-Footnote-11077779
+Node: Array Data Types1077816
+Ref: Array Data Types-Footnote-11080474
+Node: Array Functions1080566
+Node: Flattening Arrays1085064
+Node: Creating Arrays1092040
+Node: Redirection API1096807
+Node: Extension API Variables1099640
+Node: Extension Versioning1100351
+Ref: gawk-api-version1100780
+Node: Extension GMP/MPFR Versioning1102511
+Node: Extension API Informational Variables1104139
+Node: Extension API Boilerplate1105212
+Node: Changes from API V11109186
+Node: Finding Extensions1110758
+Node: Extension Example1111317
+Node: Internal File Description1112115
+Node: Internal File Ops1116195
+Ref: Internal File Ops-Footnote-11127545
+Node: Using Internal File Ops1127685
+Ref: Using Internal File Ops-Footnote-11130068
+Node: Extension Samples1130342
+Node: Extension Sample File Functions1131871
+Node: Extension Sample Fnmatch1139520
+Node: Extension Sample Fork1141007
+Node: Extension Sample Inplace1142225
+Node: Extension Sample Ord1145850
+Node: Extension Sample Readdir1146686
+Ref: table-readdir-file-types1147575
+Node: Extension Sample Revout1148642
+Node: Extension Sample Rev2way1149231
+Node: Extension Sample Read write array1149971
+Node: Extension Sample Readfile1151913
+Node: Extension Sample Time1153008
+Node: Extension Sample API Tests1154760
+Node: gawkextlib1155252
+Node: Extension summary1158170
+Node: Extension Exercises1161872
+Node: Language History1163114
+Node: V7/SVR3.11164770
+Node: SVR41166922
+Node: POSIX1168356
+Node: BTL1169737
+Node: POSIX/GNU1170466
+Node: Feature History1176244
+Node: Common Extensions1192563
+Node: Ranges and Locales1193846
+Ref: Ranges and Locales-Footnote-11198462
+Ref: Ranges and Locales-Footnote-21198489
+Ref: Ranges and Locales-Footnote-31198724
+Node: Contributors1198947
+Node: History summary1204944
+Node: Installation1206324
+Node: Gawk Distribution1207268
+Node: Getting1207752
+Node: Extracting1208715
+Node: Distribution contents1210353
+Node: Unix Installation1216833
+Node: Quick Installation1217515
+Node: Shell Startup Files1219929
+Node: Additional Configuration Options1221018
+Node: Configuration Philosophy1223333
+Node: Non-Unix Installation1225702
+Node: PC Installation1226162
+Node: PC Binary Installation1227000
+Node: PC Compiling1227435
+Node: PC Using1228552
+Node: Cygwin1232105
+Node: MSYS1233329
+Node: VMS Installation1233931
+Node: VMS Compilation1234722
+Ref: VMS Compilation-Footnote-11235951
+Node: VMS Dynamic Extensions1236009
+Node: VMS Installation Details1237694
+Node: VMS Running1239947
+Node: VMS GNV1244226
+Node: VMS Old Gawk1244961
+Node: Bugs1245432
+Node: Bug address1246095
+Node: Usenet1249077
+Node: Maintainers1250081
+Node: Other Versions1251266
+Node: Installation summary1258354
+Node: Notes1259563
+Node: Compatibility Mode1260357
+Node: Additions1261139
+Node: Accessing The Source1262064
+Node: Adding Code1263501
+Node: New Ports1269720
+Node: Derived Files1274095
+Ref: Derived Files-Footnote-11279755
+Ref: Derived Files-Footnote-21279790
+Ref: Derived Files-Footnote-31280388
+Node: Future Extensions1280502
+Node: Implementation Limitations1281160
+Node: Extension Design1282370
+Node: Old Extension Problems1283514
+Ref: Old Extension Problems-Footnote-11285032
+Node: Extension New Mechanism Goals1285089
+Ref: Extension New Mechanism Goals-Footnote-11288453
+Node: Extension Other Design Decisions1288642
+Node: Extension Future Growth1290755
+Node: Notes summary1291361
+Node: Basic Concepts1292519
+Node: Basic High Level1293200
+Ref: figure-general-flow1293482
+Ref: figure-process-flow1294167
+Ref: Basic High Level-Footnote-11297468
+Node: Basic Data Typing1297653
+Node: Glossary1300981
+Node: Copying1332866
+Node: GNU Free Documentation License1370409
+Node: Index1395529
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 8a2917e..fdeb01e 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -25693,7 +25693,7 @@ and then a @code{usage()} function:
 # Options:
 #   -G Output all group ids as space separated numbers (ruid, euid, groups)
 #   -g Output only the euid as a number
-#   -n Ouput name instead of the numeric value (with -g/-G/-u)
+#   -n Output name instead of the numeric value (with -g/-G/-u)
 #   -r Output ruid/rguid instead of effective id
 #   -u Output only effective user id, as a number
 
@@ -26549,7 +26549,7 @@ global variables with a leading capital letter.  Doing 
that would
 make the program a little easier to follow.
 
 @ifset FOR_PRINT
-@cindex Kernighan, Brian
+@cindex Kernighan, Brian @subentry quotes
 The logic for choosing which lines to print represents a @dfn{state
 machine}, which is ``a device which can be in one of a set number
 of stable conditions depending on its previous condition and on the
@@ -28671,7 +28671,7 @@ Fix this problem.
 without relying on @code{ord()} and @code{chr()}.)
 
 @item
-@cindex Kernighan, Brian
+@cindex Kernighan, Brian @subentry quotes
 In @file{uniq.awk} (@pxref{Uniq Program}, the
 logic for choosing which lines to print represents a @dfn{state
 machine}, which is ``a device which can be in one of a set number of stable
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index cc249fd..1f63933 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -24703,7 +24703,7 @@ and then a @code{usage()} function:
 # Options:
 #   -G Output all group ids as space separated numbers (ruid, euid, groups)
 #   -g Output only the euid as a number
-#   -n Ouput name instead of the numeric value (with -g/-G/-u)
+#   -n Output name instead of the numeric value (with -g/-G/-u)
 #   -r Output ruid/rguid instead of effective id
 #   -u Output only effective user id, as a number
 
@@ -25559,7 +25559,7 @@ global variables with a leading capital letter.  Doing 
that would
 make the program a little easier to follow.
 
 @ifset FOR_PRINT
-@cindex Kernighan, Brian
+@cindex Kernighan, Brian @subentry quotes
 The logic for choosing which lines to print represents a @dfn{state
 machine}, which is ``a device which can be in one of a set number
 of stable conditions depending on its previous condition and on the
@@ -27681,7 +27681,7 @@ Fix this problem.
 without relying on @code{ord()} and @code{chr()}.)
 
 @item
-@cindex Kernighan, Brian
+@cindex Kernighan, Brian @subentry quotes
 In @file{uniq.awk} (@pxref{Uniq Program}, the
 logic for choosing which lines to print represents a @dfn{state
 machine}, which is ``a device which can be in one of a set number of stable

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=c24a469a6cddbecda3a14721222e3f68d725bae5

commit c24a469a6cddbecda3a14721222e3f68d725bae5
Merge: 154592f 9c5fe8f
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Sep 18 13:05:02 2020 +0300

    Merge branch 'feature/docit' into gawk-5.1-stable


http://git.sv.gnu.org/cgit/gawk.git/commit/?id=154592f9db7af78cfa31ad6d64134ca89eed13b0

commit 154592f9db7af78cfa31ad6d64134ca89eed13b0
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Fri Sep 18 13:04:27 2020 +0300

    Update support files from GNULIB.

diff --git a/support/ChangeLog b/support/ChangeLog
index 0b14f6a..5f6e7bc 100644
--- a/support/ChangeLog
+++ b/support/ChangeLog
@@ -1,3 +1,8 @@
+2020-09-18         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * cdefs.h, dfa.c, intprops.h, regcomp.c, regex.h, regex_internal.h,
+       verify.h: Synced from GNULIB.
+
 2020-09-14         Arnold D. Robbins     <arnold@skeeve.com>
 
        * dfa.c: Synced from GNULIB.
diff --git a/support/cdefs.h b/support/cdefs.h
index 2158379..b4ac4df 100644
--- a/support/cdefs.h
+++ b/support/cdefs.h
@@ -34,7 +34,34 @@
 #undef __P
 #undef __PMT
 
-#ifdef __GNUC__
+/* Compilers that are not clang may object to
+       #if defined __clang__ && __has_attribute(...)
+   even though they do not need to evaluate the right-hand side of the &&.  */
+#if defined __clang__ && defined __has_attribute
+# define __glibc_clang_has_attribute(name) __has_attribute (name)
+#else
+# define __glibc_clang_has_attribute(name) 0
+#endif
+
+/* Compilers that are not clang may object to
+       #if defined __clang__ && __has_builtin(...)
+   even though they do not need to evaluate the right-hand side of the &&.  */
+#if defined __clang__ && defined __has_builtin
+# define __glibc_clang_has_builtin(name) __has_builtin (name)
+#else
+# define __glibc_clang_has_builtin(name) 0
+#endif
+
+/* Compilers that are not clang may object to
+       #if defined __clang__ && __has_extension(...)
+   even though they do not need to evaluate the right-hand side of the &&.  */
+#if defined __clang__ && defined __has_extension
+# define __glibc_clang_has_extension(ext) __has_extension (ext)
+#else
+# define __glibc_clang_has_extension(ext) 0
+#endif
+
+#if defined __GNUC__ || defined __clang__
 
 /* All functions, except those with callbacks or those that
    synchronize memory, are leaf functions.  */
@@ -48,16 +75,17 @@
 
 /* GCC can always grok prototypes.  For C++ programs we add throw()
    to help it optimize the function calls.  But this works only with
-   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
+   gcc 2.8.x and egcs.  For gcc 3.4 and up we even mark C functions
    as non-throwing using a function attribute since programs can use
    the -fexceptions options for C code as well.  */
-# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
+# if !defined __cplusplus \
+     && (__GNUC_PREREQ (3, 4) || __glibc_clang_has_attribute (__nothrow__))
 #  define __THROW      __attribute__ ((__nothrow__ __LEAF))
 #  define __THROWNL    __attribute__ ((__nothrow__))
 #  define __NTH(fct)   __attribute__ ((__nothrow__ __LEAF)) fct
 #  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
 # else
-#  if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
 #   define __THROW     throw ()
 #   define __THROWNL   throw ()
 #   define __NTH(fct)  __LEAF_ATTR fct throw ()
@@ -70,7 +98,7 @@
 #  endif
 # endif
 
-#else  /* Not GCC.  */
+#else  /* Not GCC or clang.  */
 
 # if (defined __cplusplus                                              \
       || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
@@ -83,16 +111,7 @@
 # define __THROWNL
 # define __NTH(fct)    fct
 
-#endif /* GCC.  */
-
-/* Compilers that are not clang may object to
-       #if defined __clang__ && __has_extension(...)
-   even though they do not need to evaluate the right-hand side of the &&.  */
-#if defined __clang__ && defined __has_extension
-# define __glibc_clang_has_extension(ext) __has_extension (ext)
-#else
-# define __glibc_clang_has_extension(ext) 0
-#endif
+#endif /* GCC || clang.  */
 
 /* These two macros are not used in glibc anymore.  They are kept here
    only because some other projects expect the macros to be defined.  */
@@ -129,6 +148,16 @@
 # define __warnattr(msg) __attribute__((__warning__ (msg)))
 # define __errordecl(name, msg) \
   extern void name (void) __attribute__((__error__ (msg)))
+#elif __glibc_clang_has_attribute (__diagnose_if__) && 0
+/* These definitions are not enabled, because they produce bogus warnings
+   in the glibc Fortify functions.  These functions are written in a style
+   that works with GCC.  In order to work with clang, these functions would
+   need to be modified.  */
+# define __warndecl(name, msg) \
+  extern void name (void) __attribute__((__diagnose_if__ (1, msg, "warning")))
+# define __warnattr(msg) __attribute__((__diagnose_if__ (1, msg, "warning")))
+# define __errordecl(name, msg) \
+  extern void name (void) __attribute__((__diagnose_if__ (1, msg, "error")))
 #else
 # define __warndecl(name, msg) extern void name (void)
 # define __warnattr(msg)
@@ -142,8 +171,8 @@
 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
 # define __flexarr     []
 # define __glibc_c99_flexarr_available 1
-#elif __GNUC_PREREQ (2,97)
-/* GCC 2.97 supports C99 flexible array members as an extension,
+#elif __GNUC_PREREQ (2,97) || defined __clang__
+/* GCC 2.97 and clang support C99 flexible array members as an extension,
    even when in C89 mode or compiling C++ (any version).  */
 # define __flexarr     []
 # define __glibc_c99_flexarr_available 1
@@ -169,7 +198,7 @@
    Example:
    int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
 
-#if defined __GNUC__ && __GNUC__ >= 2
+#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4)
 
 # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
 # ifdef __cplusplus
@@ -194,17 +223,17 @@
 */
 #endif
 
-/* GCC has various useful declarations that can be made with the
-   `__attribute__' syntax.  All of the ways we use this do fine if
-   they are omitted for compilers that don't understand it. */
-#if !defined __GNUC__ || __GNUC__ < 2
+/* GCC and clang have various useful declarations that can be made with
+   the '__attribute__' syntax.  All of the ways we use this do fine if
+   they are omitted for compilers that don't understand it.  */
+#if !(defined __GNUC__ || defined __clang__)
 # define __attribute__(xyz)    /* Ignore */
 #endif
 
 /* At some point during the gcc 2.96 development the `malloc' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.  */
-#if __GNUC_PREREQ (2,96)
+#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__malloc__)
 # define __attribute_malloc__ __attribute__ ((__malloc__))
 #else
 # define __attribute_malloc__ /* Ignore */
@@ -222,14 +251,14 @@
 /* At some point during the gcc 2.96 development the `pure' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.  */
-#if __GNUC_PREREQ (2,96)
+#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__pure__)
 # define __attribute_pure__ __attribute__ ((__pure__))
 #else
 # define __attribute_pure__ /* Ignore */
 #endif
 
 /* This declaration tells the compiler that the value is constant.  */
-#if __GNUC_PREREQ (2,5)
+#if __GNUC_PREREQ (2,5) || __glibc_clang_has_attribute (__const__)
 # define __attribute_const__ __attribute__ ((__const__))
 #else
 # define __attribute_const__ /* Ignore */
@@ -238,7 +267,7 @@
 /* At some point during the gcc 3.1 development the `used' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.  */
-#if __GNUC_PREREQ (3,1)
+#if __GNUC_PREREQ (3,1) || __glibc_clang_has_attribute (__used__)
 # define __attribute_used__ __attribute__ ((__used__))
 # define __attribute_noinline__ __attribute__ ((__noinline__))
 #else
@@ -247,7 +276,7 @@
 #endif
 
 /* Since version 3.2, gcc allows marking deprecated functions.  */
-#if __GNUC_PREREQ (3,2)
+#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__deprecated__)
 # define __attribute_deprecated__ __attribute__ ((__deprecated__))
 #else
 # define __attribute_deprecated__ /* Ignore */
@@ -270,7 +299,7 @@
    If several `format_arg' attributes are given for the same function, in
    gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
    all designated arguments are considered.  */
-#if __GNUC_PREREQ (2,8)
+#if __GNUC_PREREQ (2,8) || __glibc_clang_has_attribute (__format_arg__)
 # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
 #else
 # define __attribute_format_arg__(x) /* Ignore */
@@ -280,7 +309,7 @@
    attribute for functions was introduced.  We don't want to use it
    unconditionally (although this would be possible) since it
    generates warnings.  */
-#if __GNUC_PREREQ (2,97)
+#if __GNUC_PREREQ (2,97) || __glibc_clang_has_attribute (__format__)
 # define __attribute_format_strfmon__(a,b) \
   __attribute__ ((__format__ (__strfmon__, a, b)))
 #else
@@ -291,7 +320,7 @@
    must not be NULL.  Do not define __nonnull if it is already defined,
    for portability when this file is used in Gnulib.  */
 #ifndef __nonnull
-# if __GNUC_PREREQ (3,3)
+# if __GNUC_PREREQ (3,3) || __glibc_clang_has_attribute (__nonnull__)
 #  define __nonnull(params) __attribute__ ((__nonnull__ params))
 # else
 #  define __nonnull(params)
@@ -300,7 +329,7 @@
 
 /* If fortification mode, we warn about unused results of certain
    function calls which can lead to problems.  */
-#if __GNUC_PREREQ (3,4)
+#if __GNUC_PREREQ (3,4) || __glibc_clang_has_attribute (__warn_unused_result__)
 # define __attribute_warn_unused_result__ \
    __attribute__ ((__warn_unused_result__))
 # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
@@ -314,7 +343,7 @@
 #endif
 
 /* Forces a function to be always inlined.  */
-#if __GNUC_PREREQ (3,2)
+#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__always_inline__)
 /* The Linux kernel defines __always_inline in stddef.h (283d7573), and
    it conflicts with this definition.  Therefore undefine it first to
    allow either header to be included first.  */
@@ -327,7 +356,7 @@
 
 /* Associate error messages with the source location of the call site rather
    than with the source location inside the function.  */
-#if __GNUC_PREREQ (4,3)
+#if __GNUC_PREREQ (4,3) || __glibc_clang_has_attribute (__artificial__)
 # define __attribute_artificial__ __attribute__ ((__artificial__))
 #else
 # define __attribute_artificial__ /* Ignore */
@@ -370,12 +399,14 @@
    run in pedantic mode if the uses are carefully marked using the
    `__extension__' keyword.  But this is not generally available before
    version 2.8.  */
-#if !__GNUC_PREREQ (2,8)
+#if !(__GNUC_PREREQ (2,8) || defined __clang__)
 # define __extension__         /* Ignore */
 #endif
 
-/* __restrict is known in EGCS 1.2 and above. */
-#if !__GNUC_PREREQ (2,92)
+/* __restrict is known in EGCS 1.2 and above, and in clang.
+   It works also in C++ mode (outside of arrays), but only when spelled
+   as '__restrict', not 'restrict'.  */
+#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3)
 # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
 #  define __restrict   restrict
 # else
@@ -385,8 +416,9 @@
 
 /* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
      array_name[restrict]
-   GCC 3.1 supports this.  */
-#if __GNUC_PREREQ (3,1) && !defined __GNUG__
+   GCC 3.1 and clang support this.
+   This syntax is not usable in C++ mode.  */
+#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus
 # define __restrict_arr        __restrict
 #else
 # ifdef __GNUC__
@@ -401,7 +433,7 @@
 # endif
 #endif
 
-#if __GNUC__ >= 3
+#if (__GNUC__ >= 3) || __glibc_clang_has_builtin (__builtin_expect)
 # define __glibc_unlikely(cond)        __builtin_expect ((cond), 0)
 # define __glibc_likely(cond)  __builtin_expect ((cond), 1)
 #else
@@ -417,7 +449,8 @@
 
 #if (!defined _Noreturn \
      && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
-     &&  !__GNUC_PREREQ (4,7))
+     &&  !(__GNUC_PREREQ (4,7) \
+           || (3 < __clang_major__ + (5 <= __clang_minor__))))
 # if __GNUC_PREREQ (2,8)
 #  define _Noreturn __attribute__ ((__noreturn__))
 # else
@@ -436,7 +469,8 @@
 
 #if (!defined _Static_assert && !defined __cplusplus \
      && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
-     && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
+     && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \
+         || defined __STRICT_ANSI__))
 # define _Static_assert(expr, diagnostic) \
     extern int (*__Static_assert_function (void)) \
       [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
diff --git a/support/dfa.c b/support/dfa.c
index 8a012ad..641f422 100644
--- a/support/dfa.c
+++ b/support/dfa.c
@@ -2505,11 +2505,6 @@ reorder_tokens (struct dfa *d)
                           : NULL);
 
   for (idx_t i = 0; i < d->tindex; i++)
-    for (idx_t j = 0; j < d->follows[i].nelem; j++)
-      if (map[d->follows[i].elems[j].index] < 0)
-        map[d->follows[i].elems[j].index] = nleaves++;
-
-  for (idx_t i = 0; i < d->tindex; i++)
     {
       if (map[i] < 0)
         {
@@ -2527,7 +2522,12 @@ reorder_tokens (struct dfa *d)
         multibyte_prop[map[i]] = d->multibyte_prop[i];
 
       for (idx_t j = 0; j < d->follows[i].nelem; j++)
-        d->follows[i].elems[j].index = map[d->follows[i].elems[j].index];
+        {
+          if (map[d->follows[i].elems[j].index] == -1)
+            map[d->follows[i].elems[j].index] = nleaves++;
+
+          d->follows[i].elems[j].index = map[d->follows[i].elems[j].index];
+        }
 
       qsort (d->follows[i].elems, d->follows[i].nelem,
              sizeof *d->follows[i].elems, compare);
@@ -2700,6 +2700,17 @@ dfaanalyze (struct dfa *d, bool searchflag)
 
         case STAR:
         case PLUS:
+          /* Every element in the lastpos of the argument is in the backward
+             set of every element in the firstpos.  */
+          if (d->epsilon)
+            {
+              tmp.elems = lastpos - stk[-1].nlastpos;
+              tmp.nelem = stk[-1].nlastpos;
+              for (position *p = firstpos - stk[-1].nfirstpos;
+                   p < firstpos; p++)
+                merge2 (&backward[p->index], &tmp, &merged);
+            }
+
           /* Every element in the firstpos of the argument is in the follow
              of every element in the lastpos.  */
           {
diff --git a/support/intprops.h b/support/intprops.h
index 2c02568..cb08671 100644
--- a/support/intprops.h
+++ b/support/intprops.h
@@ -1,6 +1,6 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2020 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
@@ -48,7 +48,7 @@
 /* Minimum and maximum values for integer types and expressions.  */
 
 /* The width in bits of the integer type or expression T.
-   Do not evaluate T.
+   Do not evaluate T.  T must not be a bit-field expression.
    Padding bits are not supported; this is checked at compile-time below.  */
 #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
 
@@ -70,7 +70,7 @@
    ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
    : _GL_INT_NEGATE_CONVERT (e, 1))
 #define _GL_SIGNED_INT_MAXIMUM(e)                                       \
-  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
+  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1)
 
 /* Work around OpenVMS incompatibility with C99.  */
 #if !defined LLONG_MAX && defined __INT64_MAX
@@ -86,6 +86,7 @@
 /* Does the __typeof__ keyword work?  This could be done by
    'configure', but for now it's easier to do it by hand.  */
 #if (2 <= __GNUC__ \
+     || (4 <= __clang_major__) \
      || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
      || (0x5110 <= __SUNPRO_C && !__STDC__))
 # define _GL_HAVE___TYPEOF__ 1
@@ -94,8 +95,9 @@
 #endif
 
 /* Return 1 if the integer type or expression T might be signed.  Return 0
-   if it is definitely unsigned.  This macro does not evaluate its argument,
-   and expands to an integer constant expression.  */
+   if it is definitely unsigned.  T must not be a bit-field expression.
+   This macro does not evaluate its argument, and expands to an
+   integer constant expression.  */
 #if _GL_HAVE___TYPEOF__
 # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
 #else
@@ -108,6 +110,8 @@
 #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
 
 /* Bound on length of the string representing an integer type or expression T.
+   T must not be a bit-field expression.
+
    Subtract 1 for the sign bit if T is signed, and then add 1 more for
    a minus sign if needed.
 
@@ -119,7 +123,7 @@
    + _GL_SIGNED_TYPE_OR_EXPR (t))
 
 /* Bound on buffer size needed to represent an integer type or expression T,
-   including the terminating null.  */
+   including the terminating null.  T must not be a bit-field expression.  */
 #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
 
 
@@ -220,15 +224,33 @@
    ? (a) < (min) >> (b)                                 \
    : (max) >> (b) < (a))
 
-/* True if __builtin_add_overflow (A, B, P) works when P is non-null.  */
+/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
+   (A, B, P) work when P is non-null.  */
 #if 5 <= __GNUC__ && !defined __ICC
-# define _GL_HAS_BUILTIN_OVERFLOW 1
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
+#else
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
+#endif
+
+/* True if __builtin_mul_overflow (A, B, P) works when P is non-null.  */
+#ifdef __clang__
+/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>.  */
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
 #else
-# define _GL_HAS_BUILTIN_OVERFLOW 0
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW
 #endif
 
-/* True if __builtin_add_overflow_p (A, B, C) works.  */
-#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
+   __builtin_sub_overflow_p and __builtin_mul_overflow_p.  */
+#ifdef __clang__
+/* Clang 9 lacks __builtin_mul_overflow_p, and even if it did it would
+   presumably run afoul of Clang bug 16404.  */
+# define _GL_HAS_BUILTIN_OVERFLOW_P 0
+#else
+# define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+#endif
 
 /* The _GL*_OVERFLOW macros have the same restrictions as the
    *_RANGE_OVERFLOW macros, except that they do not assume that operands
@@ -351,43 +373,49 @@
 
 /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
    Return 1 if the result overflows.  See above for restrictions.  */
-#define INT_ADD_WRAPV(a, b, r) \
-  _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, \
-                    _GL_INT_ADD_RANGE_OVERFLOW)
-#define INT_SUBTRACT_WRAPV(a, b, r) \
-  _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, \
-                    _GL_INT_SUBTRACT_RANGE_OVERFLOW)
-#define INT_MULTIPLY_WRAPV(a, b, r) \
-   _GL_INT_OP_WRAPV (a, b, r, *, _GL_BUILTIN_MUL_OVERFLOW, \
-                     _GL_INT_MULTIPLY_RANGE_OVERFLOW)
-
-/* Like __builtin_mul_overflow, but work around GCC bug 91450.  */
-#define _GL_BUILTIN_MUL_OVERFLOW(a, b, r) \
-  ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \
-    && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
-   ? ((void) __builtin_mul_overflow (a, b, r), 1) \
-   : __builtin_mul_overflow (a, b, r))
+#if _GL_HAS_BUILTIN_ADD_OVERFLOW
+# define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
+# define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r)
+#else
+# define INT_ADD_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW)
+# define INT_SUBTRACT_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW)
+#endif
+#if _GL_HAS_BUILTIN_MUL_OVERFLOW
+# if (9 < __GNUC__ + (3 <= __GNUC_MINOR__) \
+      || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__))
+#  define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r)
+# else
+   /* Work around GCC bug 91450.  */
+#  define INT_MULTIPLY_WRAPV(a, b, r) \
+    ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \
+      && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
+     ? ((void) __builtin_mul_overflow (a, b, r), 1) \
+     : __builtin_mul_overflow (a, b, r))
+# endif
+#else
+# define INT_MULTIPLY_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW)
+#endif
 
 /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390.  See:
    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
    https://llvm.org/bugs/show_bug.cgi?id=25390
    For now, assume all versions of GCC-like compilers generate bogus
-   warnings for _Generic.  This matters only for older compilers that
-   lack __builtin_add_overflow.  */
-#if __GNUC__
+   warnings for _Generic.  This matters only for compilers that
+   lack relevant builtins.  */
+#if __GNUC__ || defined __clang__
 # define _GL__GENERIC_BOGUS 1
 #else
 # define _GL__GENERIC_BOGUS 0
 #endif
 
 /* Store the low-order bits of A <op> B into *R, where OP specifies
-   the operation.  BUILTIN is the builtin operation, and OVERFLOW the
-   overflow predicate.  Return 1 if the result overflows.  See above
-   for restrictions.  */
-#if _GL_HAS_BUILTIN_OVERFLOW
-# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r)
-#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
-# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+   the operation and OVERFLOW the overflow predicate.  Return 1 if the
+   result overflows.  See above for restrictions.  */
+#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
    (_Generic \
     (*(r), \
      signed char: \
@@ -442,7 +470,7 @@
         : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0)))
 # endif
 
-# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
    (sizeof *(r) == sizeof (signed char) \
     ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
                                  signed char, SCHAR_MIN, SCHAR_MAX, \
@@ -547,7 +575,7 @@
       ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
          ? (a) < (tmax) / (b) \
          : ((INT_NEGATE_OVERFLOW (b) \
-             ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \
+             ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \
              : (tmax) / -(b)) \
             <= -1 - (a))) \
       : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \
diff --git a/support/regcomp.c b/support/regcomp.c
index 93bb0a0..692928b 100644
--- a/support/regcomp.c
+++ b/support/regcomp.c
@@ -558,7 +558,7 @@ weak_alias (__regerror, regerror)
 static const bitset_t utf8_sb_map =
 {
   /* Set the first 128 bits.  */
-# if defined __GNUC__ && !defined __STRICT_ANSI__
+# if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__
   [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX
 # else
 #  if 4 * BITSET_WORD_BITS < ASCII_CHARS
diff --git a/support/regex.h b/support/regex.h
index 87cce7f..7418e6c 100644
--- a/support/regex.h
+++ b/support/regex.h
@@ -600,11 +600,9 @@ extern void re_set_registers (struct re_pattern_buffer 
*__buffer,
 #endif /* Use GNU */
 
 #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC)
-# ifndef _CRAY
 /* 4.2 bsd compatibility.  */
 extern char *re_comp (const char *);
 extern int re_exec (const char *);
-# endif
 #endif
 
 /* For plain 'restrict', use glibc's __restrict if defined.
@@ -614,7 +612,9 @@ extern int re_exec (const char *);
    'configure' might #define 'restrict' to those words, so pick a
    different name.  */
 #ifndef _Restrict_
-# if defined __restrict || 2 < __GNUC__ + (95 <= __GNUC_MINOR__)
+# if defined __restrict \
+     || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
+     || __clang_major__ >= 3
 #  define _Restrict_ __restrict
 # elif 199901L <= __STDC_VERSION__ || defined restrict
 #  define _Restrict_ restrict
@@ -622,13 +622,18 @@ extern int re_exec (const char *);
 #  define _Restrict_
 # endif
 #endif
-/* For [restrict], use glibc's __restrict_arr if available.
-   Otherwise, GCC 3.1 (not in C++ mode) and C99 support [restrict].  */
+/* For the ISO C99 syntax
+     array_name[restrict]
+   use glibc's __restrict_arr if available.
+   Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode).
+   Other ISO C99 compilers support it as well.  */
 #ifndef _Restrict_arr_
 # ifdef __restrict_arr
 #  define _Restrict_arr_ __restrict_arr
-# elif ((199901L <= __STDC_VERSION__ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__)) \
-        && !defined __GNUG__)
+# elif ((199901L <= __STDC_VERSION__ \
+         || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+         || __clang_major__ >= 3) \
+        && !defined __cplusplus)
 #  define _Restrict_arr_ _Restrict_
 # else
 #  define _Restrict_arr_
diff --git a/support/regex_internal.h b/support/regex_internal.h
index 8c42586..dbc503c 100644
--- a/support/regex_internal.h
+++ b/support/regex_internal.h
@@ -335,7 +335,7 @@ typedef struct
     Idx idx;                   /* for BACK_REF */
     re_context_type ctx_type;  /* for ANCHOR */
   } opr;
-#if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__
   re_token_type_t type : 8;
 #else
   re_token_type_t type;
@@ -841,10 +841,10 @@ re_string_elem_size_at (const re_string_t *pstr, Idx idx)
 #endif /* RE_ENABLE_I18N */
 
 #ifndef FALLTHROUGH
-# if __GNUC__ < 7
-#  define FALLTHROUGH ((void) 0)
-# else
+# if (__GNUC__ >= 7) || (__clang_major__ >= 10)
 #  define FALLTHROUGH __attribute__ ((__fallthrough__))
+# else
+#  define FALLTHROUGH ((void) 0)
 # endif
 #endif
 
diff --git a/support/verify.h b/support/verify.h
index f109761..fa1ed71 100644
--- a/support/verify.h
+++ b/support/verify.h
@@ -23,11 +23,15 @@
 
 /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC)
    works as per C11.  This is supported by GCC 4.6.0 and later, in C
-   mode.
+   mode, and by clang (also in C++ mode).
 
    Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
-   per C2X, and define _GL_HAVE_STATIC_ASSERT1 if static_assert (R)
-   works as per C++17.  This is supported by GCC 9.1 and later.
+   per C2X.  This is supported by GCC 9.1 and later, and by clang in
+   C++1z mode.
+
+   Define _GL_HAVE_STATIC_ASSERT1 if static_assert (R) works as per
+   C++17.  This is supported by GCC 9.1 and later, and by clang in
+   C++1z mode.
 
    Support compilers claiming conformance to the relevant standard,
    and also support GCC when not pedantic.  If we were willing to slow
@@ -35,7 +39,8 @@
    since this affects only the quality of diagnostics, why bother?  */
 #ifndef __cplusplus
 # if (201112L <= __STDC_VERSION__ \
-      || (!defined __STRICT_ANSI__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__)))
+      || (!defined __STRICT_ANSI__ \
+          && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 4 <= __clang_major__)))
 #  define _GL_HAVE__STATIC_ASSERT 1
 # endif
 # if (202000L <= __STDC_VERSION__ \
@@ -43,7 +48,15 @@
 #  define _GL_HAVE__STATIC_ASSERT1 1
 # endif
 #else
-# if 201703L <= __cplusplus || 9 <= __GNUC__
+# if 4 <= __clang_major__
+#  define _GL_HAVE__STATIC_ASSERT 1
+# endif
+# if 4 <= __clang_major__ && 201411 <= __cpp_static_assert
+#  define _GL_HAVE__STATIC_ASSERT1 1
+# endif
+# if 201703L <= __cplusplus \
+     || 9 <= __GNUC__ \
+     || (4 <= __clang_major__ && 201411 <= __cpp_static_assert)
 #  define _GL_HAVE_STATIC_ASSERT1 1
 # endif
 #endif
@@ -292,7 +305,12 @@ template <int w>
 
    Although assuming R can help a compiler generate better code or
    diagnostics, performance can suffer if R uses hard-to-optimize
-   features such as function calls not inlined by the compiler.  */
+   features such as function calls not inlined by the compiler.
+
+   Avoid Clang's __builtin_assume, as it breaks GNU Emacs master
+   as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see
+   <https://bugs.gnu.org/43152#71>.  It's not known whether this breakage
+   is a Clang bug or an Emacs bug; play it safe for now.  */
 
 #if _GL_HAS_BUILTIN_UNREACHABLE
 # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())

-----------------------------------------------------------------------

Summary of changes:
 awklib/eg/prog/id.awk    |   2 +-
 doc/ChangeLog            |   5 +
 doc/gawk.info            | 544 +++++++++++++++++++++++------------------------
 doc/gawk.texi            |   6 +-
 doc/gawktexi.in          |   6 +-
 doc/it/ChangeLog         |   5 +
 doc/it/gawk.1            |   3 +-
 doc/it/gawktexi.in       | 519 +++++++++++++++++++++++++++++++++-----------
 support/ChangeLog        |   5 +
 support/cdefs.h          | 116 ++++++----
 support/dfa.c            |  23 +-
 support/intprops.h       | 106 +++++----
 support/regcomp.c        |   2 +-
 support/regex.h          |  19 +-
 support/regex_internal.h |   8 +-
 support/verify.h         |  30 ++-
 16 files changed, 887 insertions(+), 512 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]