Changeset 2b79a70
- Timestamp:
- Aug 21, 2018, 2:21:53 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- cdbab55
- Parents:
- 51fcdbc7
- git-author:
- Rob Schluntz <rschlunt@…> (08/21/18 13:23:01)
- git-committer:
- Rob Schluntz <rschlunt@…> (08/21/18 14:21:53)
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/ResolvExpr/Resolver.cc ¶
r51fcdbc7 r2b79a70 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 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type307 objectDecl->set_type( new_type );308 303 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable 309 304 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes … … 335 330 } 336 331 337 void Resolver::previsit( TypeDecl *typeDecl ) {338 if ( typeDecl->get_base() ) {339 Type *new_type = resolveTypeof( typeDecl->get_base(), indexer );340 typeDecl->set_base( new_type );341 } // if342 }343 344 332 void Resolver::previsit( FunctionDecl *functionDecl ) { 345 333 #if 0 … … 348 336 std::cerr << std::endl; 349 337 #endif 350 Type *new_type = resolveTypeof( functionDecl->type, indexer );351 functionDecl->set_type( new_type );352 338 GuardValue( functionReturn ); 353 339 functionReturn = ResolvExpr::extractResultType( functionDecl->type ); -
TabularUnified src/SymTab/Validate.cc ¶
r51fcdbc7 r2b79a70 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; -
TabularUnified src/tests/.expect/gccExtensions.x64.txt ¶
r51fcdbc7 r2b79a70 29 29 volatile signed int __v1__Vi_2; 30 30 volatile signed int __v2__Vi_2; 31 signed int __t1__ _2;32 signed int __t2__ _2;31 signed int __t1__i_2; 32 signed int __t2__i_2; 33 33 __extension__ const signed int __ex__Ci_2; 34 34 struct S { -
TabularUnified src/tests/.expect/gccExtensions.x86.txt ¶
r51fcdbc7 r2b79a70 29 29 volatile signed int __v1__Vi_2; 30 30 volatile signed int __v2__Vi_2; 31 signed int __t1__ _2;32 signed int __t2__ _2;31 signed int __t1__i_2; 32 signed int __t2__i_2; 33 33 __extension__ const signed int __ex__Ci_2; 34 34 struct S {
Note: See TracChangeset
for help on using the changeset viewer.