Changes in src/SymTab/Validate.cc [7c919559:298fe57]
- File:
-
- 1 edited
-
src/SymTab/Validate.cc (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Validate.cc
r7c919559 r298fe57 10 10 // Created On : Sun May 17 21:50:04 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Nov 12 11:00:00 202113 // Update Count : 36 412 // Last Modified On : Fri Apr 29 9:45:00 2022 13 // Update Count : 365 14 14 // 15 15 … … 143 143 struct LinkReferenceToTypes_old final : public WithIndexer, public WithGuards, public WithVisitorRef<LinkReferenceToTypes_old>, public WithShortCircuiting { 144 144 LinkReferenceToTypes_old( const Indexer * indexer ); 145 145 146 void postvisit( TypeInstType * typeInst ); 146 147 … … 370 371 } 371 372 373 void linkReferenceToTypes( std::list< Declaration * > & translationUnit ) { 374 PassVisitor<LinkReferenceToTypes_old> lrt( nullptr ); 375 acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions 376 } 377 372 378 void validate_B( std::list< Declaration * > & translationUnit ) { 373 PassVisitor<LinkReferenceToTypes_old> lrt( nullptr );374 379 PassVisitor<FixQualifiedTypes> fixQual; 375 380 { 376 381 Stats::Heap::newPass("validate-B"); 377 382 Stats::Time::BlockGuard guard("validate-B"); 378 acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions383 //linkReferenceToTypes( translationUnit ); 379 384 mutateAll( translationUnit, fixQual ); // must happen after LinkReferenceToTypes_old, because aggregate members are accessed 380 385 HoistStruct::hoistStruct( translationUnit ); … … 974 979 // need to resolve enumerator initializers early so that other passes that determine if an expression is constexpr have the appropriate information. 975 980 SingleInit * init = strict_dynamic_cast<SingleInit *>( field->init ); 976 ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer ); 981 if ( !enumDecl->base || dynamic_cast<BasicType *>(enumDecl->base)) 982 ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer ); 983 else { 984 if (dynamic_cast<PointerType *>(enumDecl->base)) { 985 auto typePtr = dynamic_cast<PointerType *>(enumDecl->base); 986 ResolvExpr::findSingleExpression( init->value, 987 new PointerType( Type::Qualifiers(), typePtr->base ), indexer ); 988 } else { 989 ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer ); 990 } 991 } 992 977 993 } 978 994 } 995 979 996 } // if 980 997 } … … 1240 1257 declsToAddBefore.push_back( new UnionDecl( aggDecl->name, noAttributes, tyDecl->linkage ) ); 1241 1258 } else if ( EnumInstType * enumDecl = dynamic_cast< EnumInstType * >( designatorType ) ) { 1242 declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage ) ); 1259 // declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage, enumDecl->baseEnum->base ) ); 1260 if (enumDecl->baseEnum) { 1261 declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage, enumDecl->baseEnum->base ) ); 1262 } else { 1263 declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage ) ); 1264 } 1243 1265 } // if 1244 1266 return tyDecl->clone();
Note:
See TracChangeset
for help on using the changeset viewer.