Changes in / [e58dfb9:35cd219]


Ignore:
Location:
src
Files:
1 added
24 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.cc

    re58dfb9 r35cd219  
    2222#include "SemanticError.h"
    2323
     24#include <unistd.h>
     25
     26inline const std::string& error_str() {
     27        static std::string str = isatty( fileno(stderr) ) ? "\e[31merror:\e[39m " : "error: ";
     28        return str;
     29}
     30
    2431SemanticError::SemanticError() {
    2532}
    2633
    2734SemanticError::SemanticError( std::string error ) {
    28   append( error );
     35        append( error );
    2936}
    3037
    3138void SemanticError::append( SemanticError &other ) {
    32   errors.splice( errors.end(), other.errors );
     39        errors.splice( errors.end(), other.errors );
    3340}
    3441
    3542void SemanticError::append( const std::string & msg ) {
    36   errors.push_back( std::string( "Error: ") + msg );
     43        errors.emplace_back( error_str() + msg );
    3744}
    3845
     
    4249
    4350void SemanticError::print( std::ostream &os ) {
    44         std::copy( errors.begin(), errors.end(), std::ostream_iterator< std::string >( os, "\n" ) );
     51        using std::to_string;
     52        for(auto err : errors) {
     53                os << to_string( err.location ) << err.description << '\n';
     54        }
     55}
     56
     57void SemanticError::set_location( const CodeLocation& location ) {
     58        errors.begin()->maybeSet( location );
    4559}
    4660
  • src/Common/SemanticError.h

    re58dfb9 r35cd219  
    2323#include <iostream>
    2424
     25#include "utility.h"
     26
     27struct error {
     28        std::string description;
     29        CodeLocation location;
     30
     31        error() = default;
     32        error( const std::string& str ) : description( str ) {}
     33
     34        void maybeSet( const CodeLocation& location ) {
     35                if( this->location.linenumber < 0 ) {
     36                        this->location = location;
     37                }
     38        }
     39};
     40
    2541class SemanticError : public std::exception {
    2642  public:
     
    3551        void print( std::ostream &os );
    3652
     53        void set_location( const CodeLocation& location );
    3754        // constructs an exception using the given message and the printed
    3855        // representation of the obj (T must have a print method)
    3956  private:
    40         std::list< std::string > errors;
     57        std::list< error > errors;
    4158};
    4259
  • src/Common/utility.h

    re58dfb9 r35cd219  
    2525#include <sstream>
    2626#include <string>
     27
    2728#include <cassert>
    28 
    2929template< typename T >
    3030static inline T * maybeClone( const T *orig ) {
     
    303303        return group_iterate_t<Args...>(args...);
    304304}
     305
     306struct CodeLocation {
     307        int linenumber;
     308        std::string filename;
     309
     310        CodeLocation()
     311                : linenumber( -1 )
     312                , filename("")
     313        {}
     314
     315        CodeLocation( const char* filename, int lineno )
     316                : linenumber( lineno )
     317                , filename(filename ? filename : "")
     318        {}
     319};
     320
     321inline std::string to_string( const CodeLocation& location ) {
     322        return location.linenumber >= 0 ? location.filename + ":" + std::to_string(location.linenumber) + " " : "";
     323}
    305324#endif // _UTILITY_H
    306325
  • src/GenPoly/Box.cc

    re58dfb9 r35cd219  
    236236                                } // if
    237237                        } catch( SemanticError &e ) {
     238                                e.set_location( (*i)->location );
    238239                                errors.append( e );
    239240                        } // try
  • src/InitTweak/FixInit.cc

    re58dfb9 r35cd219  
    313313                                        translationUnit.splice( i, fixer.staticDtorDecls );
    314314                                } catch( SemanticError &e ) {
     315                                        e.set_location( (*i)->location );
    315316                                        errors.append( e );
    316317                                } // try
  • src/Parser/DeclarationNode.cc

    re58dfb9 r35cd219  
    921921                                Declaration * decl = extr->build();
    922922                                if ( decl ) {
     923                                        decl->location = cur->location;
    923924                                        * out++ = decl;
    924925                                } // if
     
    928929                        Declaration * decl = cur->build();
    929930                        if ( decl ) {
     931                                decl->location = cur->location;
    930932                                * out++ = decl;
    931933                        } // if
    932934                } catch( SemanticError &e ) {
     935                        e.set_location( cur->location );
    933936                        errors.append( e );
    934937                } // try
     
    950953                        if ( decl ) {
    951954                                if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
     955                                        dwt->location = cur->location;
    952956                                        * out++ = dwt;
    953957                                } else if ( StructDecl * agg = dynamic_cast< StructDecl * >( decl ) ) {
    954958                                        StructInstType * inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
    955                                         * out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, nullptr, inst, nullptr );
     959                                        auto obj = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, nullptr, inst, nullptr );
     960                                        obj->location = cur->location;
     961                                        * out++ = obj;
    956962                                        delete agg;
    957963                                } else if ( UnionDecl * agg = dynamic_cast< UnionDecl * >( decl ) ) {
    958964                                        UnionInstType * inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
    959                                         * out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, nullptr, inst, nullptr );
     965                                        auto obj = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, nullptr, inst, nullptr );
     966                                        obj->location = cur->location;
     967                                        * out++ = obj;
    960968                                } // if
    961969                        } // if
    962970                } catch( SemanticError &e ) {
     971                        e.set_location( cur->location );
    963972                        errors.append( e );
    964973                } // try
     
    979988                        * out++ = cur->buildType();
    980989                } catch( SemanticError &e ) {
     990                        e.set_location( cur->location );
    981991                        errors.append( e );
    982992                } // try
  • src/Parser/ParseNode.h

    re58dfb9 r35cd219  
    3939//##############################################################################
    4040
     41extern char* yyfilename;
     42extern int yylineno;
     43
    4144class ParseNode {
    4245  public:
     
    6568        ParseNode * next = nullptr;
    6669        std::string * name = nullptr;
     70        CodeLocation location = { yyfilename, yylineno };
    6771}; // ParseNode
    6872
     
    410414        while ( cur ) {
    411415                try {
    412 //                      SynTreeType * result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
    413416                        SynTreeType * result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
    414417                        if ( result ) {
     418                                result->location = cur->location;
    415419                                * out++ = result;
    416420                        } // if
    417421                } catch( SemanticError &e ) {
     422                        e.set_location( cur->location );
    418423                        errors.append( e );
    419424                } // try
  • src/ResolvExpr/Resolver.cc

    re58dfb9 r35cd219  
    8686                Resolver resolver;
    8787                acceptAll( translationUnit, resolver );
    88 #if 0
    89                 resolver.print( cerr );
    90                 for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
    91                         (*i)->print( std::cerr );
    92                         (*i)->accept( resolver );
    93                 } // for
    94 #endif
    9588        }
    9689
  • src/SynTree/Declaration.h

    re58dfb9 r35cd219  
    1717#define DECLARATION_H
    1818
     19#include <string>
     20
     21#include "BaseSyntaxNode.h"
     22#include "Mutator.h"
     23#include "Visitor.h"
    1924#include "SynTree.h"
    20 #include "Visitor.h"
    21 #include "Mutator.h"
    2225#include "Parser/LinkageSpec.h"
    2326#include "Parser/ParseNode.h"
    24 #include <string>
    25 
    26 class Declaration {
     27
     28class Declaration : public BaseSyntaxNode {
    2729  public:
    2830        Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage );
  • src/SynTree/Expression.h

    re58dfb9 r35cd219  
    1919#include <map>
    2020#include <memory>
     21
     22#include "BaseSyntaxNode.h"
     23#include "Constant.h"
     24#include "Mutator.h"
    2125#include "SynTree.h"
    2226#include "Visitor.h"
    23 #include "Mutator.h"
    24 #include "Constant.h"
    2527#include "Common/UniqueName.h"
    2628
    2729/// Expression is the root type for all expressions
    28 class Expression {
     30class Expression : public BaseSyntaxNode{
    2931  public:
    3032        Expression( Expression * _aname = nullptr );
  • src/SynTree/Initializer.h

    re58dfb9 r35cd219  
    1717#define INITIALIZER_H
    1818
     19#include <cassert>
     20
     21#include "BaseSyntaxNode.h"
     22#include "Mutator.h"
    1923#include "SynTree.h"
     24#include "Type.h"
    2025#include "Visitor.h"
    21 #include "Mutator.h"
    22 #include "Type.h"
    23 
    24 #include <cassert>
    2526
    2627const std::list<Expression*> noDesignators;
    2728
    2829// Initializer: base class for object initializers (provide default values)
    29 class Initializer {
     30class Initializer : public BaseSyntaxNode {
    3031  public:
    3132        //      Initializer( std::string _name = std::string(""), int _pos = 0 );
  • src/SynTree/Mutator.h

    re58dfb9 r35cd219  
    139139                        } // if
    140140                } catch( SemanticError &e ) {
     141                        e.set_location( (*i)->location );
    141142                        errors.append( e );
    142143                } // try
  • src/SynTree/Statement.h

    re58dfb9 r35cd219  
    1717#define STATEMENT_H
    1818
     19#include "BaseSyntaxNode.h"
     20#include "Label.h"
     21#include "Mutator.h"
    1922#include "SynTree.h"
     23#include "Type.h"
    2024#include "Visitor.h"
    21 #include "Mutator.h"
    2225#include "Common/SemanticError.h"
    23 #include "Type.h"
    24 #include "Label.h"
    25 
    26 class Statement {
     26
     27class Statement : public BaseSyntaxNode {
    2728  public:
    2829        Statement( std::list<Label> labels );
  • src/SynTree/Type.h

    re58dfb9 r35cd219  
    1717#define TYPE_H
    1818
     19#include "BaseSyntaxNode.h"
     20#include "Mutator.h"
    1921#include "SynTree.h"
    2022#include "Visitor.h"
    21 #include "Mutator.h"
    2223#include "Common/utility.h"
    2324
    24 class Type {
     25class Type : public BaseSyntaxNode {
    2526  public:
    2627        struct Qualifiers {
  • src/SynTree/Visitor.h

    re58dfb9 r35cd219  
    133133                        }
    134134                } catch( SemanticError &e ) {
     135                        e.set_location( (*i)->location );
    135136                        errors.append( e );
    136137                }
     
    159160                        } // if
    160161                } catch( SemanticError &e ) {
     162                        e.set_location( (*i)->location );                       
    161163                        errors.append( e );
    162164                } // try
  • src/tests/.expect/castError.txt

    re58dfb9 r35cd219  
    1 Error: Can't choose between 3 alternatives for expression Cast of:
     1castError.c:7 error: Can't choose between 3 alternatives for expression Cast of:
    22  Name: f
    33
  • src/tests/.expect/completeTypeError.txt

    re58dfb9 r35cd219  
    1 Error: No reasonable alternatives for expression Applying untyped:
     1completeTypeError.c:34 error: No reasonable alternatives for expression Applying untyped:
    22  Name: *?
    33...to:
     
    55
    66
    7 Error: No reasonable alternatives for expression Applying untyped:
     7completeTypeError.c:36 error: No reasonable alternatives for expression Applying untyped:
    88  Name: baz
    99...to:
     
    1111
    1212
    13 Error: No reasonable alternatives for expression Applying untyped:
     13completeTypeError.c:37 error: No reasonable alternatives for expression Applying untyped:
    1414  Name: quux
    1515...to:
     
    1717
    1818
    19 Error: No reasonable alternatives for expression Applying untyped:
     19completeTypeError.c:58 error: No reasonable alternatives for expression Applying untyped:
    2020  Name: baz
    2121...to:
     
    2323
    2424
    25 Error: No reasonable alternatives for expression Applying untyped:
     25completeTypeError.c:59 error: No reasonable alternatives for expression Applying untyped:
    2626  Name: quux
    2727...to:
     
    2929
    3030
    31 Error: No reasonable alternatives for expression Applying untyped:
     31completeTypeError.c:60 error: No reasonable alternatives for expression Applying untyped:
    3232  Name: *?
    3333...to:
     
    3535
    3636
    37 Error: No reasonable alternatives for expression Applying untyped:
     37completeTypeError.c:72 error: No reasonable alternatives for expression Applying untyped:
    3838  Name: baz
    3939...to:
  • src/tests/.expect/constant0-1DP.txt

    re58dfb9 r35cd219  
    1 Error: duplicate object definition for 0: signed int
    2 Error: duplicate object definition for 0: const signed int
    3 Error: duplicate object definition for 1: signed int
    4 Error: duplicate object definition for 1: const signed int
    5 Error: duplicate object definition for 0: signed int
    6 Error: duplicate object definition for 1: signed int
    7 Error: duplicate object definition for 0: signed int
    8 Error: duplicate object definition for 1: signed int
    9 Error: duplicate object definition for 0: const signed int
    10 Error: duplicate object definition for 1: const signed int
    11 Error: duplicate object definition for 0: const signed int
    12 Error: duplicate object definition for 1: const signed int
    13 Error: duplicate object definition for 0: pointer to signed int
    14 Error: duplicate object definition for 1: pointer to signed int
    15 Error: duplicate object definition for 0: pointer to signed int
    16 Error: duplicate object definition for 1: pointer to signed int
    17 Error: duplicate object definition for 0: pointer to signed int
    18 Error: duplicate object definition for 1: pointer to signed int
    19 Error: duplicate object definition for 0: pointer to signed int
    20 Error: duplicate object definition for 1: pointer to signed int
    21 Error: duplicate object definition for 0: const pointer to signed int
    22 Error: duplicate object definition for 1: const pointer to signed int
    23 Error: duplicate object definition for 0: const pointer to signed int
    24 Error: duplicate object definition for 1: const pointer to signed int
    25 Error: duplicate object definition for 0: const pointer to signed int
    26 Error: duplicate object definition for 1: const pointer to signed int
    27 Error: duplicate object definition for x: const pointer to pointer to signed int
    28 Error: duplicate object definition for 0: pointer to pointer to signed int
    29 Error: duplicate object definition for x: const pointer to pointer to signed int
    30 Error: duplicate object definition for 0: pointer to pointer to signed int
    31 Error: duplicate object definition for x: const pointer to pointer to signed int
    32 Error: duplicate object definition for 0: pointer to pointer to signed int
     1constant0-1.c:14 error: duplicate object definition for 0: signed int
     2constant0-1.c:15 error: duplicate object definition for 0: const signed int
     3constant0-1.c:16 error: duplicate object definition for 1: signed int
     4constant0-1.c:17 error: duplicate object definition for 1: const signed int
     5constant0-1.c:18 error: duplicate object definition for 0: signed int
     6constant0-1.c:18 error: duplicate object definition for 1: signed int
     7constant0-1.c:19 error: duplicate object definition for 0: signed int
     8constant0-1.c:19 error: duplicate object definition for 1: signed int
     9constant0-1.c:20 error: duplicate object definition for 0: const signed int
     10constant0-1.c:20 error: duplicate object definition for 1: const signed int
     11constant0-1.c:21 error: duplicate object definition for 0: const signed int
     12constant0-1.c:21 error: duplicate object definition for 1: const signed int
     13constant0-1.c:39 error: duplicate object definition for 0: pointer to signed int
     14constant0-1.c:39 error: duplicate object definition for 1: pointer to signed int
     15constant0-1.c:40 error: duplicate object definition for 0: pointer to signed int
     16constant0-1.c:40 error: duplicate object definition for 1: pointer to signed int
     17constant0-1.c:41 error: duplicate object definition for 0: pointer to signed int
     18constant0-1.c:41 error: duplicate object definition for 1: pointer to signed int
     19constant0-1.c:42 error: duplicate object definition for 0: pointer to signed int
     20constant0-1.c:42 error: duplicate object definition for 1: pointer to signed int
     21constant0-1.c:43 error: duplicate object definition for 0: const pointer to signed int
     22constant0-1.c:43 error: duplicate object definition for 1: const pointer to signed int
     23constant0-1.c:44 error: duplicate object definition for 0: const pointer to signed int
     24constant0-1.c:44 error: duplicate object definition for 1: const pointer to signed int
     25constant0-1.c:45 error: duplicate object definition for 0: const pointer to signed int
     26constant0-1.c:45 error: duplicate object definition for 1: const pointer to signed int
     27constant0-1.c:46 error: duplicate object definition for x: const pointer to pointer to signed int
     28constant0-1.c:46 error: duplicate object definition for 0: pointer to pointer to signed int
     29constant0-1.c:47 error: duplicate object definition for x: const pointer to pointer to signed int
     30constant0-1.c:47 error: duplicate object definition for 0: pointer to pointer to signed int
     31constant0-1.c:50 error: duplicate object definition for x: const pointer to pointer to signed int
     32constant0-1.c:50 error: duplicate object definition for 0: pointer to pointer to signed int
    3333make: *** [constant0-1DP] Error 1
  • src/tests/.expect/constant0-1NDDP.txt

    re58dfb9 r35cd219  
    1 Error: duplicate object definition for 0: signed int
    2 Error: duplicate object definition for 0: const signed int
    3 Error: duplicate object definition for 1: signed int
    4 Error: duplicate object definition for 1: const signed int
    5 Error: duplicate object definition for 0: signed int
    6 Error: duplicate object definition for 1: signed int
    7 Error: duplicate object definition for 0: signed int
    8 Error: duplicate object definition for 1: signed int
    9 Error: duplicate object definition for 0: const signed int
    10 Error: duplicate object definition for 1: const signed int
    11 Error: duplicate object definition for 0: const signed int
    12 Error: duplicate object definition for 1: const signed int
    13 Error: duplicate object definition for x: pointer to signed int
    14 Error: duplicate object definition for 0: pointer to signed int
    15 Error: duplicate object definition for x: const pointer to signed int
    16 Error: duplicate object definition for 0: const pointer to signed int
     1constant0-1.c:14 error: duplicate object definition for 0: signed int
     2constant0-1.c:15 error: duplicate object definition for 0: const signed int
     3constant0-1.c:16 error: duplicate object definition for 1: signed int
     4constant0-1.c:17 error: duplicate object definition for 1: const signed int
     5constant0-1.c:18 error: duplicate object definition for 0: signed int
     6constant0-1.c:18 error: duplicate object definition for 1: signed int
     7constant0-1.c:19 error: duplicate object definition for 0: signed int
     8constant0-1.c:19 error: duplicate object definition for 1: signed int
     9constant0-1.c:20 error: duplicate object definition for 0: const signed int
     10constant0-1.c:20 error: duplicate object definition for 1: const signed int
     11constant0-1.c:21 error: duplicate object definition for 0: const signed int
     12constant0-1.c:21 error: duplicate object definition for 1: const signed int
     13constant0-1.c:66 error: duplicate object definition for x: pointer to signed int
     14constant0-1.c:66 error: duplicate object definition for 0: pointer to signed int
     15constant0-1.c:67 error: duplicate object definition for x: const pointer to signed int
     16constant0-1.c:67 error: duplicate object definition for 0: const pointer to signed int
    1717make: *** [constant0-1NDDP] Error 1
  • src/tests/.expect/declarationErrors.txt

    re58dfb9 r35cd219  
    1 Error: duplicate static in declaration of x1: static const volatile short int
     1declarationErrors.c:16 error: duplicate static in declaration of x1: static const volatile short int
    22
    3 Error: conflicting extern & static in declaration of x2: extern const volatile short int
     3declarationErrors.c:17 error: conflicting extern & static in declaration of x2: extern const volatile short int
    44
    5 Error: conflicting extern & auto, conflicting extern & static, conflicting extern & static, duplicate extern in declaration of x3: extern const volatile short int
     5declarationErrors.c:18 error: conflicting extern & auto, conflicting extern & static, conflicting extern & static, duplicate extern in declaration of x3: extern const volatile short int
    66
    7 Error: duplicate static in declaration of x4: static const volatile instance of const volatile struct __anonymous0
     7declarationErrors.c:19 error: duplicate static in declaration of x4: static const volatile instance of const volatile struct __anonymous0
    88  with members
    99   with body
    1010
    1111
    12 Error: duplicate const, duplicate static, duplicate volatile in declaration of x5: static const volatile instance of const volatile struct __anonymous1
     12declarationErrors.c:20 error: duplicate const, duplicate static, duplicate volatile in declaration of x5: static const volatile instance of const volatile struct __anonymous1
    1313  with members
    1414   with body
    1515
    1616
    17 Error: duplicate static in declaration of x6: static const volatile instance of type Int
     17declarationErrors.c:22 error: duplicate static in declaration of x6: static const volatile instance of type Int
    1818
    19 Error: duplicate const in declaration of f01: static inline function
     19declarationErrors.c:24 error: duplicate const in declaration of f01: static inline function
    2020  with no parameters
    2121  returning const volatile int
    2222
    2323
    24 Error: duplicate volatile in declaration of f02: static inline function
     24declarationErrors.c:25 error: duplicate volatile in declaration of f02: static inline function
    2525  with no parameters
    2626  returning const volatile int
    2727
    2828
    29 Error: duplicate const in declaration of f03: static inline function
     29declarationErrors.c:26 error: duplicate const in declaration of f03: static inline function
    3030  with no parameters
    3131  returning const volatile int
    3232
    3333
    34 Error: duplicate volatile in declaration of f04: static inline function
     34declarationErrors.c:27 error: duplicate volatile in declaration of f04: static inline function
    3535  with no parameters
    3636  returning const volatile int
    3737
    3838
    39 Error: duplicate const in declaration of f05: static inline function
     39declarationErrors.c:28 error: duplicate const in declaration of f05: static inline function
    4040  with no parameters
    4141  returning const volatile int
    4242
    4343
    44 Error: duplicate volatile in declaration of f06: static inline function
     44declarationErrors.c:29 error: duplicate volatile in declaration of f06: static inline function
    4545  with no parameters
    4646  returning const volatile int
    4747
    4848
    49 Error: duplicate const in declaration of f07: static inline function
     49declarationErrors.c:30 error: duplicate const in declaration of f07: static inline function
    5050  with no parameters
    5151  returning const volatile int
    5252
    5353
    54 Error: duplicate const, duplicate volatile in declaration of f08: static inline function
     54declarationErrors.c:31 error: duplicate const, duplicate volatile in declaration of f08: static inline function
    5555  with no parameters
    5656  returning const volatile int
    5757
    5858
    59 Error: duplicate const, duplicate volatile in declaration of f09: static inline function
     59declarationErrors.c:33 error: duplicate const, duplicate volatile in declaration of f09: static inline function
    6060  with no parameters
    6161  returning const volatile int
    6262
    6363
    64 Error: duplicate const, duplicate _Atomic, duplicate _Atomic, duplicate const, duplicate restrict, duplicate volatile in declaration of f09: static inline function
     64declarationErrors.c:34 error: duplicate const, duplicate _Atomic, duplicate _Atomic, duplicate const, duplicate restrict, duplicate volatile in declaration of f09: static inline function
    6565  with no parameters
    6666  returning const restrict volatile _Atomic int
  • src/tests/.expect/dtor-early-exit-ERR1.txt

    re58dfb9 r35cd219  
    1 Error: jump to label 'L1' crosses initialization of y Branch (Goto)
     1dtor-early-exit.c:142 error: jump to label 'L1' crosses initialization of y Branch (Goto)
    22
    33make: *** [dtor-early-exit-ERR1] Error 1
  • src/tests/.expect/dtor-early-exit-ERR2.txt

    re58dfb9 r35cd219  
    1 Error: jump to label 'L2' crosses initialization of y Branch (Goto)
     1dtor-early-exit.c:142 error: jump to label 'L2' crosses initialization of y Branch (Goto)
    22
    33make: *** [dtor-early-exit-ERR2] Error 1
  • src/tests/.expect/memberCtors-ERR1.txt

    re58dfb9 r35cd219  
    1 Error: in void ?{}(struct B *b), field a2 used before being constructed
     1error: in void ?{}(struct B *b), field a2 used before being constructed
    22make: *** [memberCtors-ERR1] Error 1
  • src/tests/.expect/scopeErrors.txt

    re58dfb9 r35cd219  
    1 Error: duplicate object definition for thisIsAnError: signed int
    2 Error: duplicate function definition for butThisIsAnError: function
     1scopeErrors.c:2 error: duplicate object definition for thisIsAnError: signed int
     2scopeErrors.c:20 error: duplicate function definition for butThisIsAnError: function
    33  with parameters
    44    double
Note: See TracChangeset for help on using the changeset viewer.