Ignore:
Timestamp:
Oct 7, 2020, 9:33:22 PM (14 months ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
arm-eh, jacob/cs343-translation, master, new-ast-unique-expr
Children:
8e4bc30
Parents:
69c5c00
Message:

Fixing code-gen of constants. Fixes #182? Removes workaround 58b6d1.

Forcing recent GCC versions to place CFA-initialized constants in writeable memory, so CFA initialization doesn't segfault when writing them. See the const-init test for specifics about recent GCC versions.

src/InitTweak/FixGlobalInit.cc: generating the attribute to control GCC's placement
libcfa/src/limits.* : removing workaround from 58b6d1, making these limits const again
tests//limits.* : commenting old test that uses the constants from licfa-limits, explaining what the test doesn't exercise
tests/
/const-init.* : new test of static constants, taken from #182, and comments explaining how to test this issue

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/limits.hfa

    r69c5c00 r6fbe9a5  
    1010// Created On       : Wed Apr  6 18:06:52 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Sep 30 22:56:35 2020
    13 // Update Count     : 15
     12// Last Modified On : Thu Mar  1 16:20:54 2018
     13// Update Count     : 13
    1414//
    1515
     
    1818// Integral Constants
    1919
    20 extern signed char MIN;
    21 extern unsigned char MIN;
    22 extern short int MIN;
    23 extern unsigned short int MIN;
    24 extern int MIN;
    25 extern unsigned int MIN;
    26 extern long int MIN;
    27 extern unsigned long int MIN;
    28 extern long long int MIN;
    29 extern unsigned long long int MIN;
     20extern const signed char MIN;
     21extern const unsigned char MIN;
     22extern const short int MIN;
     23extern const unsigned short int MIN;
     24extern const int MIN;
     25extern const unsigned int MIN;
     26extern const long int MIN;
     27extern const unsigned long int MIN;
     28extern const long long int MIN;
     29extern const unsigned long long int MIN;
    3030
    31 extern signed char MAX;
    32 extern unsigned char MAX;
    33 extern short int MAX;
    34 extern unsigned short int MAX;
    35 extern int MAX;
    36 extern unsigned int MAX;
    37 extern long int MAX;
    38 extern unsigned long int MAX;
    39 extern long long int MAX;
    40 extern unsigned long long int MAX;
     31extern const signed char MAX;
     32extern const unsigned char MAX;
     33extern const short int MAX;
     34extern const unsigned short int MAX;
     35extern const int MAX;
     36extern const unsigned int MAX;
     37extern const long int MAX;
     38extern const unsigned long int MAX;
     39extern const long long int MAX;
     40extern const unsigned long long int MAX;
    4141
    4242// Floating-Point Constants
    4343
    44 extern float MIN;
    45 extern double MIN;
    46 extern long double MIN;
    47 extern float _Complex MIN;
    48 extern double _Complex MIN;
    49 extern long double _Complex MIN;
     44extern const float MIN;
     45extern const double MIN;
     46extern const long double MIN;
     47extern const float _Complex MIN;
     48extern const double _Complex MIN;
     49extern const long double _Complex MIN;
    5050
    51 extern float MAX;
    52 extern double MAX;
    53 extern long double MAX;
    54 extern float _Complex MAX;
    55 extern double _Complex MAX;
    56 extern long double _Complex MAX;
     51extern const float MAX;
     52extern const double MAX;
     53extern const long double MAX;
     54extern const float _Complex MAX;
     55extern const double _Complex MAX;
     56extern const long double _Complex MAX;
    5757
    58 extern float PI;                                                                                // pi
    59 extern float PI_2;                                                                              // pi / 2
    60 extern float PI_4;                                                                              // pi / 4
    61 extern float _1_PI;                                                                             // 1 / pi
    62 extern float _2_PI;                                                                             // 2 / pi
    63 extern float _2_SQRT_PI;                                                                // 2 / sqrt(pi)
     58extern const float PI;                                                                  // pi
     59extern const float PI_2;                                                                // pi / 2
     60extern const float PI_4;                                                                // pi / 4
     61extern const float _1_PI;                                                               // 1 / pi
     62extern const float _2_PI;                                                               // 2 / pi
     63extern const float _2_SQRT_PI;                                                  // 2 / sqrt(pi)
    6464
    65 extern double PI;                                                                               // pi
    66 extern double PI_2;                                                                             // pi / 2
    67 extern double PI_4;                                                                             // pi / 4
    68 extern double _1_PI;                                                                    // 1 / pi
    69 extern double _2_PI;                                                                    // 2 / pi
    70 extern double _2_SQRT_PI;                                                               // 2 / sqrt(pi)
     65extern const double PI;                                                                 // pi
     66extern const double PI_2;                                                               // pi / 2
     67extern const double PI_4;                                                               // pi / 4
     68extern const double _1_PI;                                                              // 1 / pi
     69extern const double _2_PI;                                                              // 2 / pi
     70extern const double _2_SQRT_PI;                                                 // 2 / sqrt(pi)
    7171
    72 extern long double PI;                                                                  // pi
    73 extern long double PI_2;                                                                // pi / 2
    74 extern long double PI_4;                                                                // pi / 4
    75 extern long double _1_PI;                                                               // 1 / pi
    76 extern long double _2_PI;                                                               // 2 / pi
    77 extern long double _2_SQRT_PI;                                                  // 2 / sqrt(pi)
     72extern const long double PI;                                                    // pi
     73extern const long double PI_2;                                                  // pi / 2
     74extern const long double PI_4;                                                  // pi / 4
     75extern const long double _1_PI;                                                 // 1 / pi
     76extern const long double _2_PI;                                                 // 2 / pi
     77extern const long double _2_SQRT_PI;                                    // 2 / sqrt(pi)
    7878
    79 extern float _Complex PI;                                                               // pi
    80 extern float _Complex PI_2;                                                             // pi / 2
    81 extern float _Complex PI_4;                                                             // pi / 4
    82 extern float _Complex _1_PI;                                                    // 1 / pi
    83 extern float _Complex _2_PI;                                                    // 2 / pi
    84 extern float _Complex _2_SQRT_PI;                                               // 2 / sqrt(pi)
     79extern const float _Complex PI;                                                 // pi
     80extern const float _Complex PI_2;                                               // pi / 2
     81extern const float _Complex PI_4;                                               // pi / 4
     82extern const float _Complex _1_PI;                                              // 1 / pi
     83extern const float _Complex _2_PI;                                              // 2 / pi
     84extern const float _Complex _2_SQRT_PI;                                 // 2 / sqrt(pi)
    8585
    86 extern double _Complex PI;                                                              // pi
    87 extern double _Complex PI_2;                                                    // pi / 2
    88 extern double _Complex PI_4;                                                    // pi / 4
    89 extern double _Complex _1_PI;                                                   // 1 / pi
    90 extern double _Complex _2_PI;                                                   // 2 / pi
    91 extern double _Complex _2_SQRT_PI;                                              // 2 / sqrt(pi)
     86extern const double _Complex PI;                                                // pi
     87extern const double _Complex PI_2;                                              // pi / 2
     88extern const double _Complex PI_4;                                              // pi / 4
     89extern const double _Complex _1_PI;                                             // 1 / pi
     90extern const double _Complex _2_PI;                                             // 2 / pi
     91extern const double _Complex _2_SQRT_PI;                                // 2 / sqrt(pi)
    9292
    93 extern long double _Complex PI;                                                 // pi
    94 extern long double _Complex PI_2;                                               // pi / 2
    95 extern long double _Complex PI_4;                                               // pi / 4
    96 extern long double _Complex _1_PI;                                              // 1 / pi
    97 extern long double _Complex _2_PI;                                              // 2 / pi
    98 extern long double _Complex _2_SQRT_PI;                                 // 2 / sqrt(pi)
     93extern const long double _Complex PI;                                   // pi
     94extern const long double _Complex PI_2;                                 // pi / 2
     95extern const long double _Complex PI_4;                                 // pi / 4
     96extern const long double _Complex _1_PI;                                // 1 / pi
     97extern const long double _Complex _2_PI;                                // 2 / pi
     98extern const long double _Complex _2_SQRT_PI;                   // 2 / sqrt(pi)
    9999
    100 extern float E;                                                                                 // e
    101 extern float LOG2_E;                                                                    // log_2(e)
    102 extern float LOG10_E;                                                                   // log_10(e)
    103 extern float LN_2;                                                                              // log_e(2)
    104 extern float LN_10;                                                                             // log_e(10)
    105 extern float SQRT_2;                                                                    // sqrt(2)
    106 extern float _1_SQRT_2;                                                                 // 1 / sqrt(2)
     100extern const float E;                                                                   // e
     101extern const float LOG2_E;                                                              // log_2(e)
     102extern const float LOG10_E;                                                             // log_10(e)
     103extern const float LN_2;                                                                // log_e(2)
     104extern const float LN_10;                                                               // log_e(10)
     105extern const float SQRT_2;                                                              // sqrt(2)
     106extern const float _1_SQRT_2;                                                   // 1 / sqrt(2)
    107107
    108 extern double E;                                                                                // e
    109 extern double LOG2_E;                                                                   // log_2(e)
    110 extern double LOG10_E;                                                                  // log_10(e)
    111 extern double LN_2;                                                                             // log_e(2)
    112 extern double LN_10;                                                                    // log_e(10)
    113 extern double SQRT_2;                                                                   // sqrt(2)
    114 extern double _1_SQRT_2;                                                                // 1 / sqrt(2)
     108extern const double E;                                                                  // e
     109extern const double LOG2_E;                                                             // log_2(e)
     110extern const double LOG10_E;                                                    // log_10(e)
     111extern const double LN_2;                                                               // log_e(2)
     112extern const double LN_10;                                                              // log_e(10)
     113extern const double SQRT_2;                                                             // sqrt(2)
     114extern const double _1_SQRT_2;                                                  // 1 / sqrt(2)
    115115
    116 extern long double E;                                                                   // e
    117 extern long double LOG2_E;                                                              // log_2(e)
    118 extern long double LOG10_E;                                                             // log_10(e)
    119 extern long double LN_2;                                                                // log_e(2)
    120 extern long double LN_10;                                                               // log_e(10)
    121 extern long double SQRT_2;                                                              // sqrt(2)
    122 extern long double _1_SQRT_2;                                                   // 1/sqrt(2)
     116extern const long double E;                                                             // e
     117extern const long double LOG2_E;                                                // log_2(e)
     118extern const long double LOG10_E;                                               // log_10(e)
     119extern const long double LN_2;                                                  // log_e(2)
     120extern const long double LN_10;                                                 // log_e(10)
     121extern const long double SQRT_2;                                                // sqrt(2)
     122extern const long double _1_SQRT_2;                                             // 1/sqrt(2)
    123123
    124 extern float _Complex E;                                                                // e
    125 extern float _Complex LOG2_E;                                                   // log_2(e)
    126 extern float _Complex LOG10_E;                                                  // log_10(e)
    127 extern float _Complex LN_2;                                                             // log_e(2)
    128 extern float _Complex LN_10;                                                    // log_e(10)
    129 extern float _Complex SQRT_2;                                                   // sqrt(2)
    130 extern float _Complex _1_SQRT_2;                                                // 1 / sqrt(2)
     124extern const float _Complex E;                                                  // e
     125extern const float _Complex LOG2_E;                                             // log_2(e)
     126extern const float _Complex LOG10_E;                                    // log_10(e)
     127extern const float _Complex LN_2;                                               // log_e(2)
     128extern const float _Complex LN_10;                                              // log_e(10)
     129extern const float _Complex SQRT_2;                                             // sqrt(2)
     130extern const float _Complex _1_SQRT_2;                                  // 1 / sqrt(2)
    131131
    132 extern double _Complex E;                                                               // e
    133 extern double _Complex LOG2_E;                                                  // log_2(e)
    134 extern double _Complex LOG10_E;                                                 // log_10(e)
    135 extern double _Complex LN_2;                                                    // log_e(2)
    136 extern double _Complex LN_10;                                                   // log_e(10)
    137 extern double _Complex SQRT_2;                                                  // sqrt(2)
    138 extern double _Complex _1_SQRT_2;                                               // 1 / sqrt(2)
     132extern const double _Complex E;                                                 // e
     133extern const double _Complex LOG2_E;                                    // log_2(e)
     134extern const double _Complex LOG10_E;                                   // log_10(e)
     135extern const double _Complex LN_2;                                              // log_e(2)
     136extern const double _Complex LN_10;                                             // log_e(10)
     137extern const double _Complex SQRT_2;                                    // sqrt(2)
     138extern const double _Complex _1_SQRT_2;                                 // 1 / sqrt(2)
    139139
    140 extern long double _Complex E;                                                  // e
    141 extern long double _Complex LOG2_E;                                             // log_2(e)
    142 extern long double _Complex LOG10_E;                                    // log_10(e)
    143 extern long double _Complex LN_2;                                               // log_e(2)
    144 extern long double _Complex LN_10;                                              // log_e(10)
    145 extern long double _Complex SQRT_2;                                             // sqrt(2)
    146 extern long double _Complex _1_SQRT_2;                                  // 1 / sqrt(2)
     140extern const long double _Complex E;                                    // e
     141extern const long double _Complex LOG2_E;                               // log_2(e)
     142extern const long double _Complex LOG10_E;                              // log_10(e)
     143extern const long double _Complex LN_2;                                 // log_e(2)
     144extern const long double _Complex LN_10;                                // log_e(10)
     145extern const long double _Complex SQRT_2;                               // sqrt(2)
     146extern const long double _Complex _1_SQRT_2;                    // 1 / sqrt(2)
    147147
    148148// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.