Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    r610354a rbe00a2d  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Dec 14 13:48:07 2023
    13 // Update Count     : 72
     12// Last Modified On : Sat Feb 25 12:01:31 2023
     13// Update Count     : 37
    1414//
    1515
     
    1818#include "ErrorObjects.h"
    1919#include "AST/Node.hpp"
    20 #include "AST/ParseNode.hpp"
    2120#include <cstring>
    2221
     
    2625extern bool SemanticErrorThrow;
    2726
    28 __attribute__((noreturn, format(printf, 2, 3))) void SemanticError( CodeLocation location, const char fmt[], ... );
     27__attribute__((noreturn)) void SemanticError( CodeLocation location, std::string error );
    2928
    30 __attribute__((noreturn)) static inline void SemanticError( CodeLocation location, std::string error ) {
    31         SemanticErrorThrow = true;
    32         throw SemanticErrorException( location, error );
    33 }
    34 
    35 __attribute__((noreturn)) static inline void SemanticError( const ast::ParseNode * obj, const std::string & error ) {
     29template< typename T >
     30__attribute__((noreturn)) static inline void SemanticError( const T * obj, const std::string & error ) {
    3631        SemanticError( obj->location, toString( error, obj ) );
    3732}
    3833
    39 __attribute__((noreturn)) static inline void SemanticError( CodeLocation location, const ast::Node * obj, const std::string & error ) {
     34template< typename T >
     35__attribute__((noreturn)) static inline void SemanticError( CodeLocation location, const T * obj, const std::string & error ) {
    4036        SemanticError( location, toString( error, obj ) );
    4137}
     
    5854
    5955constexpr WarningData WarningFormats[] = {
    60         {"self-assign"              , Severity::Warn, "self assignment of expression: %s"                          },
    61         {"reference-conversion"     , Severity::Warn, "rvalue to reference conversion of rvalue: %s"               },
    62         {"qualifiers-zero_t-one_t"  , Severity::Warn, "questionable use of type qualifier(s) with %s"              },
    63         {"aggregate-forward-decl"   , Severity::Warn, "forward declaration of nested aggregate: %s"                },
    64         {"superfluous-decl"         , Severity::Warn, "declaration does not allocate storage: %s"                  },
    65         {"superfluous-else"         , Severity::Warn, "else clause never executed for empty loop conditional"      },
    66         {"gcc-attributes"           , Severity::Warn, "invalid attribute: %s"                                      },
    67         {"c++-like-copy"            , Severity::Warn, "Constructor from reference is not a valid copy constructor" },
    68         {"depreciated-trait-syntax" , Severity::Warn, "trait type-parameters are now specified using the forall clause" },
     56        {"self-assign"              , Severity::Warn    , "self assignment of expression: %s"                          },
     57        {"reference-conversion"     , Severity::Warn    , "rvalue to reference conversion of rvalue: %s"               },
     58        {"qualifiers-zero_t-one_t"  , Severity::Warn    , "questionable use of type qualifier(s) with %s"              },
     59        {"aggregate-forward-decl"   , Severity::Warn    , "forward declaration of nested aggregate: %s"                },
     60        {"superfluous-decl"         , Severity::Warn    , "declaration does not allocate storage: %s"                  },
     61        {"superfluous-else"         , Severity::Warn    , "else clause never executed for empty loop conditional"      },
     62        {"gcc-attributes"           , Severity::Warn    , "invalid attribute: %s"                                      },
     63        {"c++-like-copy"            , Severity::Warn    , "Constructor from reference is not a valid copy constructor" },
     64        {"depreciated-trait-syntax" , Severity::Warn    , "trait type-parameters are now specified using the forall clause" },
    6965};
    7066
     
    7975        CppCopy,
    8076        DeprecTraitSyntax,
    81         NUMBER_OF_WARNINGS, // MUST be last warning
     77        NUMBER_OF_WARNINGS, // This MUST be the last warning
    8278};
    8379
     
    8783);
    8884
    89 void SemanticWarning( CodeLocation loc, Warning warn, ... );
     85#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, ##__VA_ARGS__)
    9086
    91 void SemanticWarning_SuppressAll();
    92 void SemanticWarning_EnableAll();
     87void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
     88
     89void SemanticWarning_SuppressAll   ();
     90void SemanticWarning_EnableAll     ();
    9391void SemanticWarning_WarningAsError();
    94 void SemanticWarning_Set(const char * const name, Severity s);
     92void SemanticWarning_Set           (const char * const name, Severity s);
    9593
    9694// SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine.
Note: See TracChangeset for help on using the changeset viewer.