Changes in / [cdbab55:efa8b6a]


Ignore:
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    rcdbab55 refa8b6a  
    3030#include "RenameVars.h"                  // for RenameVars, global_renamer
    3131#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
     32#include "ResolveTypeof.h"               // for resolveTypeof
    3233#include "Resolver.h"
    3334#include "SymTab/Autogen.h"              // for SizeType
     
    5657                void postvisit( FunctionDecl *functionDecl );
    5758                void previsit( ObjectDecl *objectDecll );
     59                void previsit( TypeDecl *typeDecl );
    5860                void previsit( EnumDecl * enumDecl );
    5961                void previsit( StaticAssertDecl * assertDecl );
     
    301303
    302304        void Resolver::previsit( ObjectDecl *objectDecl ) {
     305                Type *new_type = resolveTypeof( objectDecl->get_type(), indexer );
     306                objectDecl->set_type( new_type );
    303307                // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
    304308                // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
     
    330334        }
    331335
     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                } // if
     341        }
     342
    332343        void Resolver::previsit( FunctionDecl *functionDecl ) {
    333344#if 0
     
    336347                std::cerr << std::endl;
    337348#endif
     349                Type *new_type = resolveTypeof( functionDecl->type, indexer );
     350                functionDecl->set_type( new_type );
    338351                GuardValue( functionReturn );
    339352                functionReturn = ResolvExpr::extractResultType( functionDecl->type );
  • src/SymTab/Validate.cc

    rcdbab55 refa8b6a  
    6262#include "ResolvExpr/typeops.h"        // for typesCompatible
    6363#include "ResolvExpr/Resolver.h"       // for findSingleExpression
    64 #include "ResolvExpr/ResolveTypeof.h"  // for resolveTypeof
    6564#include "SymTab/Autogen.h"            // for SizeType
    6665#include "SynTree/Attribute.h"         // for noAttributes, Attribute
     
    248247                void previsit( StructInstType * inst );
    249248                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 * );
    259249        };
    260250
     
    322312                Concurrency::implementThreadStarter( translationUnit );
    323313                mutateAll( translationUnit, compoundliteral );
    324                 FixObjectType::fix( translationUnit );
    325314                ArrayLength::computeLength( translationUnit );
    326315                acceptAll( translationUnit, finder ); // xxx - remove this pass soon
     
    12491238        }
    12501239
    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 
    12761240        void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) {
    12771241                PassVisitor<ArrayLength> len;
  • tests/.expect/gccExtensions.x64.txt

    rcdbab55 refa8b6a  
    2929    volatile signed int _X2v1Vi_2;
    3030    volatile signed int _X2v2Vi_2;
    31     signed int _X2t1i_2;
    32     signed int _X2t2i_2;
     31    signed int _X2t1_2;
     32    signed int _X2t2_2;
    3333    __extension__ const signed int _X2exKi_2;
    3434    struct S {
  • tests/.expect/gccExtensions.x86.txt

    rcdbab55 refa8b6a  
    2929    volatile signed int _X2v1Vi_2;
    3030    volatile signed int _X2v2Vi_2;
    31     signed int _X2t1i_2;
    32     signed int _X2t2i_2;
     31    signed int _X2t1_2;
     32    signed int _X2t2_2;
    3333    __extension__ const signed int _X2exKi_2;
    3434    struct S {
Note: See TracChangeset for help on using the changeset viewer.