Changes in / [1a3eab8:b9c432f]
- Location:
- src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Mangler.cc
r1a3eab8 rb9c432f 35 35 namespace { 36 36 /// Mangles names to a unique C identifier 37 struct Mangler : public WithShortCircuiting, public WithVisitorRef<Mangler> , public WithGuards{37 struct Mangler : public WithShortCircuiting, public WithVisitorRef<Mangler> { 38 38 Mangler( bool mangleOverridable, bool typeMode, bool mangleGenericParams ); 39 39 Mangler( const Mangler & ) = delete; … … 70 70 bool typeMode; ///< Produce a unique mangled name for a type 71 71 bool mangleGenericParams; ///< Include generic parameters in name mangling if true 72 bool inFunctionType = false; ///< Include type qualifiers if false.73 72 74 73 void mangleDecl( DeclarationWithType *declaration ); … … 190 189 191 190 void Mangler::postvisit( ReferenceType * refType ) { 192 // don't print prefix (e.g. 'R') for reference types so that references and non-references do not overload.193 // Further, do not print the qualifiers for a reference type (but do run printQualifers because of TypeDecls, etc.),194 // by pretending every reference type is a function parameter.195 GuardValue( inFunctionType );196 inFunctionType = true;197 191 printQualifiers( refType ); 192 mangleName << "R"; 198 193 maybeAccept( refType->base, *visitor ); 199 194 } … … 211 206 printQualifiers( functionType ); 212 207 mangleName << "F"; 213 // turn on inFunctionType so that printQualifiers does not print most qualifiers for function parameters,214 // since qualifiers on outermost parameter type do not differentiate function types, e.g.,215 // void (*)(const int) and void (*)(int) are the same type, but void (*)(const int *) and void (*)(int *) are different216 GuardValue( inFunctionType );217 inFunctionType = true;218 208 std::list< Type* > returnTypes = getTypes( functionType->get_returnVals() ); 219 209 acceptAll( returnTypes, *visitor ); … … 314 304 // skip if not including qualifiers 315 305 if ( typeMode ) return; 306 316 307 if ( ! type->get_forall().empty() ) { 317 308 std::list< std::string > assertionNames; … … 346 337 mangleName << "_"; 347 338 } // if 348 if ( ! inFunctionType ) { 349 // these qualifiers do not distinguish the outermost type of a function parameter 350 if ( type->get_const() ) { 351 mangleName << "C"; 352 } // if 353 if ( type->get_volatile() ) { 354 mangleName << "V"; 355 } // if 356 // Removed due to restrict not affecting function compatibility in GCC 357 // if ( type->get_isRestrict() ) { 358 // mangleName << "E"; 359 // } // if 360 if ( type->get_atomic() ) { 361 mangleName << "A"; 362 } // if 363 } 339 if ( type->get_const() ) { 340 mangleName << "C"; 341 } // if 342 if ( type->get_volatile() ) { 343 mangleName << "V"; 344 } // if 364 345 if ( type->get_mutex() ) { 365 346 mangleName << "M"; 366 347 } // if 348 // Removed due to restrict not affecting function compatibility in GCC 349 // if ( type->get_isRestrict() ) { 350 // mangleName << "E"; 351 // } // if 367 352 if ( type->get_lvalue() ) { 368 353 // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues 369 354 mangleName << "L"; 370 355 } 371 372 if ( inFunctionType ) { 373 // turn off inFunctionType so that types can be differentiated for nested qualifiers 374 GuardValue( inFunctionType ); 375 inFunctionType = false; 376 } 356 if ( type->get_atomic() ) { 357 mangleName << "A"; 358 } // if 377 359 } 378 360 } // namespace -
src/tests/.expect/KRfunctions.x64.txt
r1a3eab8 rb9c432f 53 53 __attribute__ ((unused)) signed int *___retval_f8__Pi_1; 54 54 } 55 signed int *const __f9__F Pi_PiiPi__1(signed int *__a__Pi_1, signed int __b__i_1, signed int *__c__Pi_1){55 signed int *const __f9__FCPi_PiiPi__1(signed int *__a__Pi_1, signed int __b__i_1, signed int *__c__Pi_1){ 56 56 __attribute__ ((unused)) signed int *const ___retval_f9__CPi_1; 57 57 } … … 77 77 __attribute__ ((unused)) signed int ___retval_f15__i_1; 78 78 } 79 const signed int __fred__F i___1(){79 const signed int __fred__FCi___1(){ 80 80 __attribute__ ((unused)) const signed int ___retval_fred__Ci_1; 81 81 signed int *(*__x__PFPi_ii__2)(signed int __anonymous_object4, signed int __anonymous_object5); … … 85 85 ((void)(__x__PFPi_ii__2=(((void)(_tmp_cp_ret2=__f10__FPFPi_ii__iPiPid__1(3, (&__a__i_2), (&__b__i_2), 3.5))) , _tmp_cp_ret2))); 86 86 ((void)(_tmp_cp_ret2) /* ^?{} */); 87 const signed int __f1__F i_iPiPi__2(signed int __a__i_2, signed int *__b__Pi_2, signed int *__c__Pi_2){87 const signed int __f1__FCi_iPiPi__2(signed int __a__i_2, signed int *__b__Pi_2, signed int *__c__Pi_2){ 88 88 __attribute__ ((unused)) const signed int ___retval_f1__Ci_2; 89 89 } 90 const signed int __f2__F i_iii__2(signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){90 const signed int __f2__FCi_iii__2(signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){ 91 91 __attribute__ ((unused)) const signed int ___retval_f2__Ci_2; 92 92 } -
src/tests/.expect/attributes.x64.txt
r1a3eab8 rb9c432f 251 251 __attribute__ ((used,used,used)) const signed int __vd5__A0Ci_1[((unsigned long int )5)]; 252 252 __attribute__ ((used,used,unused,used)) const signed int __vd6__A0Ci_1[((unsigned long int )5)]; 253 __attribute__ ((used,used,used,used)) const signed int (*__vd7__PF i___1)();254 __attribute__ ((used,used,unused,used,used)) const signed int (*__vd8__PF i___1)();253 __attribute__ ((used,used,used,used)) const signed int (*__vd7__PFCi___1)(); 254 __attribute__ ((used,used,unused,used,used)) const signed int (*__vd8__PFCi___1)(); 255 255 __attribute__ ((unused,used)) signed int __f1__Fi___1(); 256 256 __attribute__ ((unused)) signed int __f1__Fi___1(){ 257 257 __attribute__ ((unused)) signed int ___retval_f1__i_1; 258 258 } 259 __attribute__ ((unused,unused,unused,used)) signed int **const __f2__F PPi___1();260 __attribute__ ((unused,unused,unused)) signed int **const __f2__F PPi___1(){259 __attribute__ ((unused,unused,unused,used)) signed int **const __f2__FCPPi___1(); 260 __attribute__ ((unused,unused,unused)) signed int **const __f2__FCPPi___1(){ 261 261 __attribute__ ((unused)) signed int **const ___retval_f2__CPPi_1; 262 262 } -
src/tests/.expect/declarationSpecifier.x64.txt
r1a3eab8 rb9c432f 447 447 } 448 448 static volatile const struct __anonymous15 __x36__CV14s__anonymous15_1; 449 static inline volatile const signed int __f11__F i___1();450 static inline volatile const signed int __f12__F i___1();451 static inline volatile const signed int __f13__F i___1();452 static inline volatile const signed int __f14__F i___1();453 static inline volatile const signed int __f15__F i___1();454 static inline volatile const signed int __f16__F i___1();455 static inline volatile const signed int __f17__F i___1();456 static inline volatile const signed int __f18__F i___1();457 static inline volatile const signed short int __f21__F s___1();458 static inline volatile const signed short int __f22__F s___1();459 static inline volatile const signed short int __f23__F s___1();460 static inline volatile const signed short int __f24__F s___1();461 static inline volatile const signed short int __f25__F s___1();462 static inline volatile const signed short int __f26__F s___1();463 static inline volatile const signed short int __f27__F s___1();464 static inline volatile const signed short int __f28__F s___1();449 static inline volatile const signed int __f11__FCVi___1(); 450 static inline volatile const signed int __f12__FCVi___1(); 451 static inline volatile const signed int __f13__FCVi___1(); 452 static inline volatile const signed int __f14__FCVi___1(); 453 static inline volatile const signed int __f15__FCVi___1(); 454 static inline volatile const signed int __f16__FCVi___1(); 455 static inline volatile const signed int __f17__FCVi___1(); 456 static inline volatile const signed int __f18__FCVi___1(); 457 static inline volatile const signed short int __f21__FCVs___1(); 458 static inline volatile const signed short int __f22__FCVs___1(); 459 static inline volatile const signed short int __f23__FCVs___1(); 460 static inline volatile const signed short int __f24__FCVs___1(); 461 static inline volatile const signed short int __f25__FCVs___1(); 462 static inline volatile const signed short int __f26__FCVs___1(); 463 static inline volatile const signed short int __f27__FCVs___1(); 464 static inline volatile const signed short int __f28__FCVs___1(); 465 465 struct __anonymous16 { 466 466 signed int __i__i_1; … … 489 489 ((void)((*___dst__R14s__anonymous16_1).__i__i_1=__i__i_1) /* ?{} */); 490 490 } 491 static inline volatile const struct __anonymous16 __f31__F 14s__anonymous16___1();491 static inline volatile const struct __anonymous16 __f31__FCV14s__anonymous16___1(); 492 492 struct __anonymous17 { 493 493 signed int __i__i_1; … … 516 516 ((void)((*___dst__R14s__anonymous17_1).__i__i_1=__i__i_1) /* ?{} */); 517 517 } 518 static inline volatile const struct __anonymous17 __f32__F 14s__anonymous17___1();518 static inline volatile const struct __anonymous17 __f32__FCV14s__anonymous17___1(); 519 519 struct __anonymous18 { 520 520 signed int __i__i_1; … … 543 543 ((void)((*___dst__R14s__anonymous18_1).__i__i_1=__i__i_1) /* ?{} */); 544 544 } 545 static inline volatile const struct __anonymous18 __f33__F 14s__anonymous18___1();545 static inline volatile const struct __anonymous18 __f33__FCV14s__anonymous18___1(); 546 546 struct __anonymous19 { 547 547 signed int __i__i_1; … … 570 570 ((void)((*___dst__R14s__anonymous19_1).__i__i_1=__i__i_1) /* ?{} */); 571 571 } 572 static inline volatile const struct __anonymous19 __f34__F 14s__anonymous19___1();572 static inline volatile const struct __anonymous19 __f34__FCV14s__anonymous19___1(); 573 573 struct __anonymous20 { 574 574 signed int __i__i_1; … … 597 597 ((void)((*___dst__R14s__anonymous20_1).__i__i_1=__i__i_1) /* ?{} */); 598 598 } 599 static inline volatile const struct __anonymous20 __f35__F 14s__anonymous20___1();599 static inline volatile const struct __anonymous20 __f35__FCV14s__anonymous20___1(); 600 600 struct __anonymous21 { 601 601 signed int __i__i_1; … … 624 624 ((void)((*___dst__R14s__anonymous21_1).__i__i_1=__i__i_1) /* ?{} */); 625 625 } 626 static inline volatile const struct __anonymous21 __f36__F 14s__anonymous21___1();626 static inline volatile const struct __anonymous21 __f36__FCV14s__anonymous21___1(); 627 627 struct __anonymous22 { 628 628 signed int __i__i_1; … … 651 651 ((void)((*___dst__R14s__anonymous22_1).__i__i_1=__i__i_1) /* ?{} */); 652 652 } 653 static inline volatile const struct __anonymous22 __f37__F 14s__anonymous22___1();653 static inline volatile const struct __anonymous22 __f37__FCV14s__anonymous22___1(); 654 654 struct __anonymous23 { 655 655 signed int __i__i_1; … … 678 678 ((void)((*___dst__R14s__anonymous23_1).__i__i_1=__i__i_1) /* ?{} */); 679 679 } 680 static inline volatile const struct __anonymous23 __f38__F 14s__anonymous23___1();681 static inline volatile const signed short int __f41__F s___1();682 static inline volatile const signed short int __f42__F s___1();683 static inline volatile const signed short int __f43__F s___1();684 static inline volatile const signed short int __f44__F s___1();685 static inline volatile const signed short int __f45__F s___1();686 static inline volatile const signed short int __f46__F s___1();687 static inline volatile const signed short int __f47__F s___1();688 static inline volatile const signed short int __f48__F s___1();680 static inline volatile const struct __anonymous23 __f38__FCV14s__anonymous23___1(); 681 static inline volatile const signed short int __f41__FCVs___1(); 682 static inline volatile const signed short int __f42__FCVs___1(); 683 static inline volatile const signed short int __f43__FCVs___1(); 684 static inline volatile const signed short int __f44__FCVs___1(); 685 static inline volatile const signed short int __f45__FCVs___1(); 686 static inline volatile const signed short int __f46__FCVs___1(); 687 static inline volatile const signed short int __f47__FCVs___1(); 688 static inline volatile const signed short int __f48__FCVs___1(); 689 689 signed int __main__Fi_iPPCc__1(signed int __argc__i_1, const char **__argv__PPCc_1){ 690 690 __attribute__ ((unused)) signed int ___retval_main__i_1; -
src/tests/.expect/functions.x64.txt
r1a3eab8 rb9c432f 46 46 __attribute__ ((unused)) signed int ___retval_fII1__i_1; 47 47 } 48 const signed int __fII2__F i_i__1(signed int __i__i_1){48 const signed int __fII2__FCi_i__1(signed int __i__i_1){ 49 49 __attribute__ ((unused)) const signed int ___retval_fII2__Ci_1; 50 50 } … … 52 52 __attribute__ ((unused)) signed int ___retval_fII3__i_1; 53 53 } 54 extern const signed int __fII4__F i_i__1(signed int __i__i_1){54 extern const signed int __fII4__FCi_i__1(signed int __i__i_1){ 55 55 __attribute__ ((unused)) const signed int ___retval_fII4__Ci_1; 56 56 } … … 58 58 __attribute__ ((unused)) signed int *___retval_fII5__Pi_1; 59 59 } 60 signed int *const __fII6__F Pi___1(){60 signed int *const __fII6__FCPi___1(){ 61 61 __attribute__ ((unused)) signed int *const ___retval_fII6__CPi_1; 62 62 } … … 76 76 __attribute__ ((unused)) signed int ___retval_fO2__i_1; 77 77 } 78 const signed int __fO3__F i_i__1(signed int __i__i_1){78 const signed int __fO3__FCi_i__1(signed int __i__i_1){ 79 79 __attribute__ ((unused)) const signed int ___retval_fO3__Ci_1; 80 80 } … … 82 82 __attribute__ ((unused)) signed int ___retval_fO4__i_1; 83 83 } 84 extern const signed int __fO5__F i_i__1(signed int __i__i_1){84 extern const signed int __fO5__FCi_i__1(signed int __i__i_1){ 85 85 __attribute__ ((unused)) const signed int ___retval_fO5__Ci_1; 86 86 } … … 176 176 signed int __f11__Fi_i__1(signed int __anonymous_object16); 177 177 signed int __f12__Fi___1(void); 178 const double __bar1__F d___1();179 const double __bar2__F d_i__1(signed int __anonymous_object17);180 const double __bar3__F d_d__1(double __anonymous_object18);181 const double __foo__F d___1(void);182 const double __foo__F d_i__1(signed int __anonymous_object19);183 const double __foo__F d_d__1(double __anonymous_object20){178 const double __bar1__FCd___1(); 179 const double __bar2__FCd_i__1(signed int __anonymous_object17); 180 const double __bar3__FCd_d__1(double __anonymous_object18); 181 const double __foo__FCd___1(void); 182 const double __foo__FCd_i__1(signed int __anonymous_object19); 183 const double __foo__FCd_d__1(double __anonymous_object20){ 184 184 __attribute__ ((unused)) const double ___retval_foo__Cd_1; 185 185 ((void)((*((double *)(&___retval_foo__Cd_1)))=3.0) /* ?{} */); … … 224 224 __attribute__ ((unused)) const signed int *___retval_f1__PCi_1; 225 225 } 226 static const signed int *__f2__FPCi___1(void){227 __attribute__ ((unused)) const signed int *___retval_f2__PCi_1;228 } 229 static inline signed int *const __f3__F Pi___1(void){226 static const signed int __f2__FCi___1(void){ 227 __attribute__ ((unused)) const signed int ___retval_f2__Ci_1; 228 } 229 static inline signed int *const __f3__FCPi___1(void){ 230 230 __attribute__ ((unused)) signed int *const ___retval_f3__CPi_1; 231 231 } … … 234 234 signed int field_1; 235 235 }; 236 static inline const struct _conc__tuple2_3 __f4__F TPii____1(void){236 static inline const struct _conc__tuple2_3 __f4__FCTPii____1(void){ 237 237 __attribute__ ((unused)) const struct _conc__tuple2_3 ___retval_f4__CTPii__1; 238 238 } 239 static const struct _conc__tuple2_3 __f5__F TPiCi____1(void){239 static const struct _conc__tuple2_3 __f5__FCTPiCi____1(void){ 240 240 __attribute__ ((unused)) const struct _conc__tuple2_3 ___retval_f5__CTPiCi__1; 241 241 } 242 signed int __f__Fi_PFi__PFPi__PFPPi__PFPCPi__PF PCPi__PiPiPPiPPiPPPiPPPiPPCPiPPCPiPCPCPiPCPCPi__1(signed int (*__anonymous_object27)(), signed int *(*__anonymous_object28)(), signed int **(*__anonymous_object29)(), signed int *const *(*__anonymous_object30)(), signed int *const *const (*__anonymous_object31)(), signed int *__anonymous_object32, signed int __anonymous_object33[((unsigned long int )10)], signed int **__anonymous_object34, signed int *__anonymous_object35[((unsigned long int )10)], signed int ***__anonymous_object36, signed int **__anonymous_object37[((unsigned long int )10)], signed int *const **__anonymous_object38, signed int *const *__anonymous_object39[((unsigned long int )10)], signed int *const *const *__anonymous_object40, signed int *const *const __anonymous_object41[((unsigned long int )10)]);243 signed int __f__Fi_PFi__PFPi__PFPPi__PFPCPi__PF PCPi__PiPiPPiPPiPPPiPPPiPPCPiPPCPiPCPCPiPCPCPi__1(signed int (*__anonymous_object42)(), signed int *(*__anonymous_object43)(), signed int **(*__anonymous_object44)(), signed int *const *(*__anonymous_object45)(), signed int *const *const (*__anonymous_object46)(), signed int *__anonymous_object47, signed int __anonymous_object48[((unsigned long int )10)], signed int **__anonymous_object49, signed int *__anonymous_object50[((unsigned long int )10)], signed int ***__anonymous_object51, signed int **__anonymous_object52[((unsigned long int )10)], signed int *const **__anonymous_object53, signed int *const *__anonymous_object54[((unsigned long int )10)], signed int *const *const *__anonymous_object55, signed int *const *const __anonymous_object56[((unsigned long int )10)]){242 signed int __f__Fi_PFi__PFPi__PFPPi__PFPCPi__PFCPCPi__PiPiPPiPPiPPPiPPPiPPCPiPPCPiPCPCPiPCPCPi__1(signed int (*__anonymous_object27)(), signed int *(*__anonymous_object28)(), signed int **(*__anonymous_object29)(), signed int *const *(*__anonymous_object30)(), signed int *const *const (*__anonymous_object31)(), signed int *__anonymous_object32, signed int __anonymous_object33[((unsigned long int )10)], signed int **__anonymous_object34, signed int *__anonymous_object35[((unsigned long int )10)], signed int ***__anonymous_object36, signed int **__anonymous_object37[((unsigned long int )10)], signed int *const **__anonymous_object38, signed int *const *__anonymous_object39[((unsigned long int )10)], signed int *const *const *__anonymous_object40, signed int *const *const __anonymous_object41[((unsigned long int )10)]); 243 signed int __f__Fi_PFi__PFPi__PFPPi__PFPCPi__PFCPCPi__PiPiPPiPPiPPPiPPPiPPCPiPPCPiPCPCPiPCPCPi__1(signed int (*__anonymous_object42)(), signed int *(*__anonymous_object43)(), signed int **(*__anonymous_object44)(), signed int *const *(*__anonymous_object45)(), signed int *const *const (*__anonymous_object46)(), signed int *__anonymous_object47, signed int __anonymous_object48[((unsigned long int )10)], signed int **__anonymous_object49, signed int *__anonymous_object50[((unsigned long int )10)], signed int ***__anonymous_object51, signed int **__anonymous_object52[((unsigned long int )10)], signed int *const **__anonymous_object53, signed int *const *__anonymous_object54[((unsigned long int )10)], signed int *const *const *__anonymous_object55, signed int *const *const __anonymous_object56[((unsigned long int )10)]){ 244 244 __attribute__ ((unused)) signed int ___retval_f__i_1; 245 245 } -
src/tests/functions.c
r1a3eab8 rb9c432f 1 // 1 // 2 2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo 3 3 // 4 4 // The contents of this file are covered under the licence agreement in the 5 5 // file "LICENCE" distributed with Cforall. 6 // 7 // functions.c -- 8 // 6 // 7 // functions.c -- 8 // 9 9 // Author : Peter A. Buhr 10 10 // Created On : Wed Aug 17 08:39:58 2016 … … 12 12 // Last Modified On : Wed Jan 17 22:44:12 2018 13 13 // Update Count : 12 14 // 14 // 15 15 16 16 // ANSI function definitions … … 123 123 124 124 static const int * f1() {} 125 static [ *const int ] f2() {}125 static [ const int ] f2() {} 126 126 static inline [ const * int ] f3() {} 127 127 static inline [ const [ * int, int ] ] f4() {}
Note: See TracChangeset
for help on using the changeset viewer.