Changes in src/Tuples/TupleExpansion.cc [d5556a3:4c8621ac]
- File:
-
- 1 edited
-
src/Tuples/TupleExpansion.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Tuples/TupleExpansion.cc
rd5556a3 r4c8621ac 144 144 145 145 Expression * MemberTupleExpander::mutate( UntypedMemberExpr * memberExpr ) { 146 if ( TupleExpr * tupleExpr = dynamic_cast<TupleExpr * > ( memberExpr->get_member() ) ) {146 if ( UntypedTupleExpr * tupleExpr = dynamic_cast< UntypedTupleExpr * > ( memberExpr->get_member() ) ) { 147 147 Expression * aggr = memberExpr->get_aggregate()->clone()->acceptMutator( *this ); 148 148 // aggregate expressions which might be impure must be wrapped in unique expressions … … 225 225 decl->get_parameters().push_back( tyParam ); 226 226 } 227 if ( tupleType->size() == 0 ) { 228 // empty structs are not standard C. Add a dummy field to empty tuples to silence warnings when a compound literal Tuple0 is created. 229 decl->get_members().push_back( new ObjectDecl( "dummy", DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) ); 230 } 227 231 typeMap[mangleName] = decl; 228 232 addDeclaration( decl ); … … 315 319 qualifiers &= type->get_qualifiers(); 316 320 } // for 321 if ( exprs.empty() ) qualifiers = Type::Qualifiers(); 317 322 return tupleType; 323 } 324 325 TypeInstType * isTtype( Type * type ) { 326 if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( type ) ) { 327 if ( inst->get_baseType()->get_kind() == TypeDecl::Ttype ) { 328 return inst; 329 } 330 } 331 return nullptr; 318 332 } 319 333
Note:
See TracChangeset
for help on using the changeset viewer.