Changes in / [b9c432f:1a3eab8]
- Location:
- src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/SymTab/Mangler.cc ¶
rb9c432f r1a3eab8 35 35 namespace { 36 36 /// Mangles names to a unique C identifier 37 struct Mangler : public WithShortCircuiting, public WithVisitorRef<Mangler> {37 struct Mangler : public WithShortCircuiting, public WithVisitorRef<Mangler>, public WithGuards { 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. 72 73 73 74 void mangleDecl( DeclarationWithType *declaration ); … … 189 190 190 191 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; 191 197 printQualifiers( refType ); 192 mangleName << "R";193 198 maybeAccept( refType->base, *visitor ); 194 199 } … … 206 211 printQualifiers( functionType ); 207 212 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 different 216 GuardValue( inFunctionType ); 217 inFunctionType = true; 208 218 std::list< Type* > returnTypes = getTypes( functionType->get_returnVals() ); 209 219 acceptAll( returnTypes, *visitor ); … … 304 314 // skip if not including qualifiers 305 315 if ( typeMode ) return; 306 307 316 if ( ! type->get_forall().empty() ) { 308 317 std::list< std::string > assertionNames; … … 337 346 mangleName << "_"; 338 347 } // if 339 if ( type->get_const() ) { 340 mangleName << "C"; 341 } // if 342 if ( type->get_volatile() ) { 343 mangleName << "V"; 344 } // 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 } 345 364 if ( type->get_mutex() ) { 346 365 mangleName << "M"; 347 366 } // if 348 // Removed due to restrict not affecting function compatibility in GCC349 // if ( type->get_isRestrict() ) {350 // mangleName << "E";351 // } // if352 367 if ( type->get_lvalue() ) { 353 368 // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues 354 369 mangleName << "L"; 355 370 } 356 if ( type->get_atomic() ) { 357 mangleName << "A"; 358 } // if 371 372 if ( inFunctionType ) { 373 // turn off inFunctionType so that types can be differentiated for nested qualifiers 374 GuardValue( inFunctionType ); 375 inFunctionType = false; 376 } 359 377 } 360 378 } // namespace -
TabularUnified src/tests/.expect/KRfunctions.x64.txt ¶
rb9c432f r1a3eab8 53 53 __attribute__ ((unused)) signed int *___retval_f8__Pi_1; 54 54 } 55 signed int *const __f9__F CPi_PiiPi__1(signed int *__a__Pi_1, signed int __b__i_1, signed int *__c__Pi_1){55 signed int *const __f9__FPi_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 Ci___1(){79 const signed int __fred__Fi___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 Ci_iPiPi__2(signed int __a__i_2, signed int *__b__Pi_2, signed int *__c__Pi_2){87 const signed int __f1__Fi_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 Ci_iii__2(signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){90 const signed int __f2__Fi_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 } -
TabularUnified src/tests/.expect/attributes.x64.txt ¶
rb9c432f r1a3eab8 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 Ci___1)();254 __attribute__ ((used,used,unused,used,used)) const signed int (*__vd8__PF Ci___1)();253 __attribute__ ((used,used,used,used)) const signed int (*__vd7__PFi___1)(); 254 __attribute__ ((used,used,unused,used,used)) const signed int (*__vd8__PFi___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 CPPi___1();260 __attribute__ ((unused,unused,unused)) signed int **const __f2__F CPPi___1(){259 __attribute__ ((unused,unused,unused,used)) signed int **const __f2__FPPi___1(); 260 __attribute__ ((unused,unused,unused)) signed int **const __f2__FPPi___1(){ 261 261 __attribute__ ((unused)) signed int **const ___retval_f2__CPPi_1; 262 262 } -
TabularUnified src/tests/.expect/declarationSpecifier.x64.txt ¶
rb9c432f r1a3eab8 447 447 } 448 448 static volatile const struct __anonymous15 __x36__CV14s__anonymous15_1; 449 static inline volatile const signed int __f11__F CVi___1();450 static inline volatile const signed int __f12__F CVi___1();451 static inline volatile const signed int __f13__F CVi___1();452 static inline volatile const signed int __f14__F CVi___1();453 static inline volatile const signed int __f15__F CVi___1();454 static inline volatile const signed int __f16__F CVi___1();455 static inline volatile const signed int __f17__F CVi___1();456 static inline volatile const signed int __f18__F CVi___1();457 static inline volatile const signed short int __f21__F CVs___1();458 static inline volatile const signed short int __f22__F CVs___1();459 static inline volatile const signed short int __f23__F CVs___1();460 static inline volatile const signed short int __f24__F CVs___1();461 static inline volatile const signed short int __f25__F CVs___1();462 static inline volatile const signed short int __f26__F CVs___1();463 static inline volatile const signed short int __f27__F CVs___1();464 static inline volatile const signed short int __f28__F CVs___1();449 static inline volatile const signed int __f11__Fi___1(); 450 static inline volatile const signed int __f12__Fi___1(); 451 static inline volatile const signed int __f13__Fi___1(); 452 static inline volatile const signed int __f14__Fi___1(); 453 static inline volatile const signed int __f15__Fi___1(); 454 static inline volatile const signed int __f16__Fi___1(); 455 static inline volatile const signed int __f17__Fi___1(); 456 static inline volatile const signed int __f18__Fi___1(); 457 static inline volatile const signed short int __f21__Fs___1(); 458 static inline volatile const signed short int __f22__Fs___1(); 459 static inline volatile const signed short int __f23__Fs___1(); 460 static inline volatile const signed short int __f24__Fs___1(); 461 static inline volatile const signed short int __f25__Fs___1(); 462 static inline volatile const signed short int __f26__Fs___1(); 463 static inline volatile const signed short int __f27__Fs___1(); 464 static inline volatile const signed short int __f28__Fs___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 CV14s__anonymous16___1();491 static inline volatile const struct __anonymous16 __f31__F14s__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 CV14s__anonymous17___1();518 static inline volatile const struct __anonymous17 __f32__F14s__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 CV14s__anonymous18___1();545 static inline volatile const struct __anonymous18 __f33__F14s__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 CV14s__anonymous19___1();572 static inline volatile const struct __anonymous19 __f34__F14s__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 CV14s__anonymous20___1();599 static inline volatile const struct __anonymous20 __f35__F14s__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 CV14s__anonymous21___1();626 static inline volatile const struct __anonymous21 __f36__F14s__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 CV14s__anonymous22___1();653 static inline volatile const struct __anonymous22 __f37__F14s__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 CV14s__anonymous23___1();681 static inline volatile const signed short int __f41__F CVs___1();682 static inline volatile const signed short int __f42__F CVs___1();683 static inline volatile const signed short int __f43__F CVs___1();684 static inline volatile const signed short int __f44__F CVs___1();685 static inline volatile const signed short int __f45__F CVs___1();686 static inline volatile const signed short int __f46__F CVs___1();687 static inline volatile const signed short int __f47__F CVs___1();688 static inline volatile const signed short int __f48__F CVs___1();680 static inline volatile const struct __anonymous23 __f38__F14s__anonymous23___1(); 681 static inline volatile const signed short int __f41__Fs___1(); 682 static inline volatile const signed short int __f42__Fs___1(); 683 static inline volatile const signed short int __f43__Fs___1(); 684 static inline volatile const signed short int __f44__Fs___1(); 685 static inline volatile const signed short int __f45__Fs___1(); 686 static inline volatile const signed short int __f46__Fs___1(); 687 static inline volatile const signed short int __f47__Fs___1(); 688 static inline volatile const signed short int __f48__Fs___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; -
TabularUnified src/tests/.expect/functions.x64.txt ¶
rb9c432f r1a3eab8 46 46 __attribute__ ((unused)) signed int ___retval_fII1__i_1; 47 47 } 48 const signed int __fII2__F Ci_i__1(signed int __i__i_1){48 const signed int __fII2__Fi_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 Ci_i__1(signed int __i__i_1){54 extern const signed int __fII4__Fi_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 CPi___1(){60 signed int *const __fII6__FPi___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 Ci_i__1(signed int __i__i_1){78 const signed int __fO3__Fi_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 Ci_i__1(signed int __i__i_1){84 extern const signed int __fO5__Fi_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 Cd___1();179 const double __bar2__F Cd_i__1(signed int __anonymous_object17);180 const double __bar3__F Cd_d__1(double __anonymous_object18);181 const double __foo__F Cd___1(void);182 const double __foo__F Cd_i__1(signed int __anonymous_object19);183 const double __foo__F Cd_d__1(double __anonymous_object20){178 const double __bar1__Fd___1(); 179 const double __bar2__Fd_i__1(signed int __anonymous_object17); 180 const double __bar3__Fd_d__1(double __anonymous_object18); 181 const double __foo__Fd___1(void); 182 const double __foo__Fd_i__1(signed int __anonymous_object19); 183 const double __foo__Fd_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__FCi___1(void){227 __attribute__ ((unused)) const signed int ___retval_f2__Ci_1;228 } 229 static inline signed int *const __f3__F CPi___1(void){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__FPi___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 CTPii____1(void){236 static inline const struct _conc__tuple2_3 __f4__FTPii____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 CTPiCi____1(void){239 static const struct _conc__tuple2_3 __f5__FTPiCi____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 CPCPi__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 CPCPi__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__PFPCPi__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__PFPCPi__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 } -
TabularUnified src/tests/functions.c ¶
rb9c432f r1a3eab8 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.