Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    rbe00a2d r9a533ba  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Feb 25 12:15:40 2023
    13 // Update Count     : 1404
     12// Last Modified On : Thu Feb 16 14:12:03 2023
     13// Update Count     : 1388
    1414//
    1515
     
    254254        newnode->type->enumeration.typed = typed;
    255255        newnode->type->enumeration.hiding = hiding;
    256         if ( base && base->type )  {
     256        if ( base && base->type)  {
    257257                newnode->type->base = base->type;
    258258        } // if
     
    567567
    568568        checkQualifiers( type, q->type );
    569         if ( (builtin == Zero || builtin == One) && q->type->qualifiers.any() && error.length() == 0 ) {
    570                 SemanticWarning( yylloc, Warning::BadQualifiersZeroOne, builtinTypeNames[builtin] );
     569        if ( (builtin == Zero || builtin == One) && q->type->qualifiers.val != 0 && error.length() == 0 ) {
     570                SemanticWarning( yylloc, Warning::BadQualifiersZeroOne, Type::QualifiersNames[ilog2( q->type->qualifiers.val )], builtinTypeNames[builtin] );
    571571        } // if
    572572        addQualifiersToType( q->type, type );
     
    984984
    985985                        if ( DeclarationNode * extr = cur->extractAggregate() ) {
    986                                 // Handle the case where a SUE declaration is contained within an object or type declaration.
    987 
    988                                 assert( cur->type );
    989                                 // Replace anonymous SUE name with typedef name to prevent anonymous naming problems across translation units.
    990                                 if ( cur->type->kind == TypeData::Symbolic && cur->type->symbolic.isTypedef ) {
    991                                         assert( extr->type );
    992                                         // Handle anonymous aggregates: typedef struct { int i; } foo
    993                                         extr->type->qualifiers.reset();         // clear any CVs associated with the aggregate
    994                                         if ( extr->type->kind == TypeData::Aggregate && extr->type->aggregate.anon ) {
    995                                                 delete extr->type->aggregate.name;
    996                                                 extr->type->aggregate.name = new string( "__anonymous_" + *cur->name );
    997                                                 extr->type->aggregate.anon = false;
    998                                                 assert( cur->type->base );
    999                                                 if ( cur->type->base ) {
    1000                                                         delete cur->type->base->aggInst.aggregate->aggregate.name;
    1001                                                         cur->type->base->aggInst.aggregate->aggregate.name = new string( "__anonymous_" + *cur->name );
    1002                                                         cur->type->base->aggInst.aggregate->aggregate.anon = false;
    1003                                                         cur->type->base->aggInst.aggregate->qualifiers.reset();
    1004                                                 } // if
    1005                                         } // if
    1006                                         // Handle anonymous enumeration: typedef enum { A, B, C } foo
    1007                                         if ( extr->type->kind == TypeData::Enum && extr->type->enumeration.anon ) {
    1008                                                 delete extr->type->enumeration.name;
    1009                                                 extr->type->enumeration.name = new string( "__anonymous_" + *cur->name );
    1010                                                 extr->type->enumeration.anon = false;
    1011                                                 assert( cur->type->base );
    1012                                                 if ( cur->type->base ) {
    1013                                                         delete cur->type->base->aggInst.aggregate->enumeration.name;
    1014                                                         cur->type->base->aggInst.aggregate->enumeration.name = new string( "__anonymous_" + *cur->name );
    1015                                                         cur->type->base->aggInst.aggregate->enumeration.anon = false;
    1016                                                 } // if
    1017                                         } // if
    1018                                 } // if
     986                                // handle the case where a structure declaration is contained within an object or type declaration
    1019987
    1020988                                Declaration * decl = extr->build();
Note: See TracChangeset for help on using the changeset viewer.