Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Specialize.cc

    rd3b7937 r0f8e4ac  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jan 20 12:40:33 2016
    13 // Update Count     : 18
     12// Last Modified On : Thu Apr 28 15:17:45 2016
     13// Update Count     : 24
    1414//
    1515
     
    2525#include "SynTree/Statement.h"
    2626#include "SynTree/Type.h"
     27#include "SynTree/Attribute.h"
    2728#include "SynTree/TypeSubstitution.h"
    2829#include "SynTree/Mutator.h"
     
    4142                virtual Expression * mutate( AddressExpr *castExpr );
    4243                virtual Expression * mutate( CastExpr *castExpr );
    43                 virtual Expression * mutate( LogicalExpr *logicalExpr );
    44                 virtual Expression * mutate( ConditionalExpr *conditionalExpr );
    45                 virtual Expression * mutate( CommaExpr *commaExpr );
     44                // virtual Expression * mutate( LogicalExpr *logicalExpr );
     45                // virtual Expression * mutate( ConditionalExpr *conditionalExpr );
     46                // virtual Expression * mutate( CommaExpr *commaExpr );
    4647
    4748          private:
     
    9899                } // if
    99100                // create new thunk with same signature as formal type (C linkage, empty body)
    100                 FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( std::list< std::string >() ), false, false );
     101                FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
    101102                thunkFunc->fixUniqueId();
     103
     104                // thunks may be generated and not used - silence warning with attribute
     105                thunkFunc->get_attributes().push_back( new Attribute( "unused" ) );
    102106
    103107                // thread thunk parameters into call to actual function, naming thunk parameters as we go
     
    142146
    143147        Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
    144                 assert( ! actual->get_results().empty() );
     148                assert( ! actual->get_results().empty() ); // using front, should have this assert
    145149                if ( needsSpecialization( formalType, actual->get_results().front(), env ) ) {
    146150                        FunctionType *funType;
     
    212216        }
    213217
    214         Expression * Specialize::mutate( LogicalExpr *logicalExpr ) {
    215                 return logicalExpr;
    216         }
    217 
    218         Expression * Specialize::mutate( ConditionalExpr *condExpr ) {
    219                 return condExpr;
    220         }
    221 
    222         Expression * Specialize::mutate( CommaExpr *commaExpr ) {
    223                 return commaExpr;
    224         }
     218        // Removing these for now. Richard put these in for some reason, but it's not clear why.
     219        // In particular, copy constructors produce a comma expression, and with this code the parts
     220        // of that comma expression are not specialized, which causes problems.
     221
     222        // Expression * Specialize::mutate( LogicalExpr *logicalExpr ) {
     223        //      return logicalExpr;
     224        // }
     225
     226        // Expression * Specialize::mutate( ConditionalExpr *condExpr ) {
     227        //      return condExpr;
     228        // }
     229
     230        // Expression * Specialize::mutate( CommaExpr *commaExpr ) {
     231        //      return commaExpr;
     232        // }
    225233} // namespace GenPoly
    226234
Note: See TracChangeset for help on using the changeset viewer.