Changes in / [efa8b6a:cdbab55]


Ignore:
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    refa8b6a rcdbab55  
    3030#include "RenameVars.h"                  // for RenameVars, global_renamer
    3131#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
    32 #include "ResolveTypeof.h"               // for resolveTypeof
    3332#include "Resolver.h"
    3433#include "SymTab/Autogen.h"              // for SizeType
     
    5756                void postvisit( FunctionDecl *functionDecl );
    5857                void previsit( ObjectDecl *objectDecll );
    59                 void previsit( TypeDecl *typeDecl );
    6058                void previsit( EnumDecl * enumDecl );
    6159                void previsit( StaticAssertDecl * assertDecl );
     
    303301
    304302        void Resolver::previsit( ObjectDecl *objectDecl ) {
    305                 Type *new_type = resolveTypeof( objectDecl->get_type(), indexer );
    306                 objectDecl->set_type( new_type );
    307303                // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
    308304                // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
     
    334330        }
    335331
    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 
    343332        void Resolver::previsit( FunctionDecl *functionDecl ) {
    344333#if 0
     
    347336                std::cerr << std::endl;
    348337#endif
    349                 Type *new_type = resolveTypeof( functionDecl->type, indexer );
    350                 functionDecl->set_type( new_type );
    351338                GuardValue( functionReturn );
    352339                functionReturn = ResolvExpr::extractResultType( functionDecl->type );
  • src/SymTab/Validate.cc

    refa8b6a rcdbab55  
    6262#include "ResolvExpr/typeops.h"        // for typesCompatible
    6363#include "ResolvExpr/Resolver.h"       // for findSingleExpression
     64#include "ResolvExpr/ResolveTypeof.h"  // for resolveTypeof
    6465#include "SymTab/Autogen.h"            // for SizeType
    6566#include "SynTree/Attribute.h"         // for noAttributes, Attribute
     
    247248                void previsit( StructInstType * inst );
    248249                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 * );
    249259        };
    250260
     
    312322                Concurrency::implementThreadStarter( translationUnit );
    313323                mutateAll( translationUnit, compoundliteral );
     324                FixObjectType::fix( translationUnit );
    314325                ArrayLength::computeLength( translationUnit );
    315326                acceptAll( translationUnit, finder ); // xxx - remove this pass soon
     
    12381249        }
    12391250
     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
    12401276        void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) {
    12411277                PassVisitor<ArrayLength> len;
  • tests/.expect/gccExtensions.x64.txt

    refa8b6a rcdbab55  
    2929    volatile signed int _X2v1Vi_2;
    3030    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;
    3333    __extension__ const signed int _X2exKi_2;
    3434    struct S {
  • tests/.expect/gccExtensions.x86.txt

    refa8b6a rcdbab55  
    2929    volatile signed int _X2v1Vi_2;
    3030    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;
    3333    __extension__ const signed int _X2exKi_2;
    3434    struct S {
Note: See TracChangeset for help on using the changeset viewer.