Changeset 8a78dd3


Ignore:
Timestamp:
Nov 27, 2017, 4:17:28 PM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
8a0a64d9
Parents:
56de6b39 (diff), a16a7ec (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r56de6b39 r8a78dd3  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Nov 20 09:45:36 2017
    13 // Update Count     : 2945
     12// Last Modified On : Sun Nov 26 11:36:36 2017
     13// Update Count     : 2969
    1414//
    1515
     
    345345%type<en> type_list
    346346
    347 %type<decl> type_qualifier type_qualifier_name type_qualifier_list_opt type_qualifier_list
     347%type<decl> type_qualifier type_qualifier_name forall type_qualifier_list_opt type_qualifier_list
    348348%type<decl> type_specifier type_specifier_nobody
    349349
     
    379379//   `---'                                              matches start of TYPEGENname '('
    380380// Must be:
    381 // Foo( int ) ( *fp )( int );
     381//   Foo( int ) ( *fp )( int );
    382382
    383383// Order of these lines matters (low-to-high precedence).
     
    10581058with_statement:
    10591059        WITH '(' tuple_expression_list ')' statement
    1060                 { $$ = nullptr; }                                                               // FIX ME
     1060                { throw SemanticError("With clause is currently unimplemented."); $$ = nullptr; } // FIX ME
    10611061        ;
    10621062
     
    10641064mutex_statement:
    10651065        MUTEX '(' argument_expression_list ')' statement
    1066                 { $$ = nullptr; }                                                               // FIX ME
     1066                { throw SemanticError("Mutex statement is currently unimplemented."); $$ = nullptr; } // FIX ME
    10671067        ;
    10681068
     
    12801280        c_declaration pop ';'
    12811281        | cfa_declaration pop ';'                                                       // CFA
     1282        | STATICASSERT '(' constant_expression ',' string_literal ')' ';' // C11
     1283                { throw SemanticError("Static assert is currently unimplemented."); $$ = nullptr; }     // FIX ME
    12821284        ;
    12831285
     
    15871589        | ATOMIC
    15881590                { $$ = DeclarationNode::newTypeQualifier( Type::Atomic ); }
    1589         | FORALL '('
     1591        | forall
     1592        ;
     1593
     1594forall:
     1595        FORALL '('
    15901596                {
    15911597                        typedefTable.enterScope();
     
    23742380                        $$ = $2;
    23752381                }
     2382        | forall '{' external_definition_list '}'                       // CFA, namespace
    23762383        ;
    23772384
     
    23992406with_clause_opt:
    24002407        // empty
    2401                 { $$ = nullptr; }                                                               // FIX ME
     2408                { $$ = nullptr; }
    24022409        | WITH '(' tuple_expression_list ')'
    2403                 { $$ = nullptr; }                                                               // FIX ME
     2410                { throw SemanticError("With clause is currently unimplemented."); $$ = nullptr; } // FIX ME
    24042411        ;
    24052412
     
    24182425                        $$ = $2->addFunctionBody( $4 )->addType( $1 );
    24192426                }
     2427                // handles default int return type, OBSOLESCENT (see 1)
    24202428        | type_qualifier_list function_declarator with_clause_opt compound_statement
    24212429                {
     
    24242432                        $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
    24252433                }
     2434                // handles default int return type, OBSOLESCENT (see 1)
    24262435        | declaration_qualifier_list function_declarator with_clause_opt compound_statement
    24272436                {
     
    24302439                        $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
    24312440                }
     2441                // handles default int return type, OBSOLESCENT (see 1)
    24322442        | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement
    24332443                {
     
    24452455                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addType( $1 );
    24462456                }
     2457                // handles default int return type, OBSOLESCENT (see 1)
    24472458        | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    24482459                {
     
    24512462                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
    24522463                }
    2453 
    2454                 // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
     2464                // handles default int return type, OBSOLESCENT (see 1)
    24552465        | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    24562466                {
     
    24592469                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
    24602470                }
     2471                // handles default int return type, OBSOLESCENT (see 1)
    24612472        | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    24622473                {
  • src/tests/polymorphism.c

    r56de6b39 r8a78dd3  
    4747        S s;
    4848        s.i = i;
    49         assert(s.i == i);
     49        assertf(s.i == i, "struct operation fails in polymorphic context.");
    5050
    5151        B b;
     
    7373        {
    7474                // test aggregates with polymorphic members
    75                 typedef uint32_t x_type;
    76                 typedef uint64_t y_type;
     75                typedef __attribute__((aligned(8))) uint32_t x_type;
     76                typedef __attribute__((aligned(8))) uint64_t y_type;
    7777
    7878                x_type x = 3;
     
    8989                // ensure that the size of aggregates with polymorphic members
    9090                // matches the size of the aggregates in a monomorphic context
    91                 assert( struct_size(x, y) == sizeof(S) );
    92                 assert( union_size(x, y) == sizeof(U) );
     91                assertf( struct_size(x, y) == sizeof(S), "struct size differs in polymorphic context." );
     92                assertf( union_size(x, y) == sizeof(U), "union size differs in polymorphic context." );
    9393
    9494                y_type ?=?(y_type & this, zero_t) {
     
    111111                u.f2 = 0;
    112112                u.f1 = x;
    113                 assert(ret == u.f2);
     113                assertf(ret == u.f2, "union operation fails in polymorphic context.");
    114114        }
    115115}
Note: See TracChangeset for help on using the changeset viewer.