Changeset b262cb3
- Timestamp:
- Jan 11, 2024, 8:46:37 AM (11 months ago)
- Branches:
- master
- Children:
- 8655363
- Parents:
- cfbc56ec
- Location:
- src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Attribute.cpp
rcfbc56ec rb262cb3 38 38 39 39 bool Attribute::isValidOnFuncParam() const { 40 // attributes such as aligned, cleanup, etc. produce GCC errors when they appear 41 // on function parameters. Maintain here a whitelist of attribute names that are 42 // allowed to appear on parameters. 40 // Attributes produce GCC errors when they appear on function 41 // parameters. This is an allow-list, switching to a forbid-list would 42 // have to at least mention: 43 // aligned 43 44 std::string norm = normalizedName(); 44 return norm == "unused" || norm == "noreturn" ;45 return norm == "unused" || norm == "noreturn" || norm == "vector_size"; 45 46 } 46 47 -
src/Validate/Autogen.cpp
rcfbc56ec rb262cb3 440 440 441 441 auto * paramType = ast::deepCopy( member->get_type() ); 442 paramType->attributes.clear(); 442 erase_if( paramType->attributes, []( ast::Attribute const * attr ){ 443 return !attr->isValidOnFuncParam(); 444 } ); 443 445 ast::ObjectDecl * param = new ast::ObjectDecl( 444 446 getLocation(), member->name, paramType ); -
src/Validate/ReplaceTypedef.cpp
rcfbc56ec rb262cb3 25 25 26 26 namespace { 27 28 bool isNonParameterAttribute( ast::Attribute const * attr ) {29 static const std::vector<std::string> bad_names = {30 "aligned", "__aligned__",31 };32 for ( auto name : bad_names ) {33 if ( name == attr->name ) {34 return true;35 }36 }37 return false;38 }39 27 40 28 struct ReplaceTypedefCore final : … … 101 89 // by typedef. GCC appears to do the same thing. 102 90 if ( isAtFunctionTop ) { 103 erase_if( ret->attributes, isNonParameterAttribute ); 91 erase_if( ret->attributes, []( ast::Attribute const * attr ){ 92 return !attr->isValidOnFuncParam(); 93 } ); 104 94 } 105 95 for ( const auto & attribute : type->attributes ) {
Note: See TracChangeset
for help on using the changeset viewer.