Changes in / [efa8b6a:cdbab55]
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/Resolver.cc
refa8b6a rcdbab55 30 30 #include "RenameVars.h" // for RenameVars, global_renamer 31 31 #include "ResolvExpr/TypeEnvironment.h" // for TypeEnvironment 32 #include "ResolveTypeof.h" // for resolveTypeof33 32 #include "Resolver.h" 34 33 #include "SymTab/Autogen.h" // for SizeType … … 57 56 void postvisit( FunctionDecl *functionDecl ); 58 57 void previsit( ObjectDecl *objectDecll ); 59 void previsit( TypeDecl *typeDecl );60 58 void previsit( EnumDecl * enumDecl ); 61 59 void previsit( StaticAssertDecl * assertDecl ); … … 303 301 304 302 void Resolver::previsit( ObjectDecl *objectDecl ) { 305 Type *new_type = resolveTypeof( objectDecl->get_type(), indexer );306 objectDecl->set_type( new_type );307 303 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable 308 304 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes … … 334 330 } 335 331 336 void Resolver::previsit( TypeDecl *typeDecl ) {337 if ( typeDecl->get_base() ) {338 Type *new_type = resolveTypeof( typeDecl->get_base(), indexer );339 typeDecl->set_base( new_type );340 } // if341 }342 343 332 void Resolver::previsit( FunctionDecl *functionDecl ) { 344 333 #if 0 … … 347 336 std::cerr << std::endl; 348 337 #endif 349 Type *new_type = resolveTypeof( functionDecl->type, indexer );350 functionDecl->set_type( new_type );351 338 GuardValue( functionReturn ); 352 339 functionReturn = ResolvExpr::extractResultType( functionDecl->type ); -
src/SymTab/Validate.cc
refa8b6a rcdbab55 62 62 #include "ResolvExpr/typeops.h" // for typesCompatible 63 63 #include "ResolvExpr/Resolver.h" // for findSingleExpression 64 #include "ResolvExpr/ResolveTypeof.h" // for resolveTypeof 64 65 #include "SymTab/Autogen.h" // for SizeType 65 66 #include "SynTree/Attribute.h" // for noAttributes, Attribute … … 247 248 void previsit( StructInstType * inst ); 248 249 void previsit( UnionInstType * inst ); 250 }; 251 252 struct FixObjectType : public WithIndexer { 253 /// resolves typeof type in object, function, and type declarations 254 static void fix( std::list< Declaration * > & translationUnit ); 255 256 void previsit( ObjectDecl * ); 257 void previsit( FunctionDecl * ); 258 void previsit( TypeDecl * ); 249 259 }; 250 260 … … 312 322 Concurrency::implementThreadStarter( translationUnit ); 313 323 mutateAll( translationUnit, compoundliteral ); 324 FixObjectType::fix( translationUnit ); 314 325 ArrayLength::computeLength( translationUnit ); 315 326 acceptAll( translationUnit, finder ); // xxx - remove this pass soon … … 1238 1249 } 1239 1250 1251 void FixObjectType::fix( std::list< Declaration * > & translationUnit ) { 1252 PassVisitor<FixObjectType> fixer; 1253 acceptAll( translationUnit, fixer ); 1254 } 1255 1256 void FixObjectType::previsit( ObjectDecl * objDecl ) { 1257 Type *new_type = ResolvExpr::resolveTypeof( objDecl->get_type(), indexer ); 1258 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1259 objDecl->set_type( new_type ); 1260 } 1261 1262 void FixObjectType::previsit( FunctionDecl * funcDecl ) { 1263 Type *new_type = ResolvExpr::resolveTypeof( funcDecl->type, indexer ); 1264 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1265 funcDecl->set_type( new_type ); 1266 } 1267 1268 void FixObjectType::previsit( TypeDecl *typeDecl ) { 1269 if ( typeDecl->get_base() ) { 1270 Type *new_type = ResolvExpr::resolveTypeof( typeDecl->get_base(), indexer ); 1271 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1272 typeDecl->set_base( new_type ); 1273 } // if 1274 } 1275 1240 1276 void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) { 1241 1277 PassVisitor<ArrayLength> len; -
tests/.expect/gccExtensions.x64.txt
refa8b6a rcdbab55 29 29 volatile signed int _X2v1Vi_2; 30 30 volatile signed int _X2v2Vi_2; 31 signed int _X2t1 _2;32 signed int _X2t2 _2;31 signed int _X2t1i_2; 32 signed int _X2t2i_2; 33 33 __extension__ const signed int _X2exKi_2; 34 34 struct S { -
tests/.expect/gccExtensions.x86.txt
refa8b6a rcdbab55 29 29 volatile signed int _X2v1Vi_2; 30 30 volatile signed int _X2v2Vi_2; 31 signed int _X2t1 _2;32 signed int _X2t2 _2;31 signed int _X2t1i_2; 32 signed int _X2t2i_2; 33 33 __extension__ const signed int _X2exKi_2; 34 34 struct S {
Note:
See TracChangeset
for help on using the changeset viewer.