Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    r4358c1e r9dc31c10  
    77// SemanticError.h --
    88//
    9 // Author           : Thierry Delisle
     9// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed May 16 15:01:23 2018
    13 // Update Count     : 30
     12// Last Modified On : Wed Apr 18 16:28:16 2018
     13// Update Count     : 18
    1414//
    1515
     
    1717
    1818#include "ErrorObjects.h"
    19 #include <cstring>
    2019
    2120//-----------------------------------------------------------------------------
    2221// Errors
    23 
    24 extern bool SemanticErrorThrow;
    2522
    2623__attribute__((noreturn)) void SemanticError( CodeLocation location, std::string error );
     
    3936// Warnings
    4037
    41 enum class Severity {
    42         Suppress,
    43         Warn,
    44         Error,
    45         Critical
    46 };
    47 
    48 struct WarningData {
    49         const char * const name;
    50         const char * const message;
    51         const Severity default_severity;
    52 };
    53 
    54 constexpr WarningData WarningFormats[] = {
    55         {"self-assign"            , "self assignment of expression: %s"            , Severity::Warn},
    56         {"reference-conversion"   , "rvalue to reference conversion of rvalue: %s" , Severity::Warn},
    57         {"qualifiers-zero_t-one_t", "questionable use of type qualifier %s with %s", Severity::Warn},
     38constexpr const char * const WarningFormats[] = {
     39        "self assignment of expression: %s",
     40        "rvalue to reference conversion of rvalue: %s",
     41        "questionable use of type qualifier %s with %s",
    5842};
    5943
     
    7054);
    7155
    72 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, __VA_ARGS__)
     56// ## used here to allow empty __VA_ARGS__
     57#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], ## __VA_ARGS__)
    7358
    7459void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
    7560
    76 void SemanticWarning_SuppressAll   ();
    77 void SemanticWarning_EnableAll     ();
    78 void SemanticWarning_WarningAsError();
    79 void SemanticWarning_Set           (const char * const name, Severity s);
    80 
    81 // SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine.
    82 static inline bool SemanticWarning_Exist(const char * const name) {
    83         for ( const auto & w : WarningFormats ) {
    84                 if ( std::strcmp( name, w.name ) == 0 ) return true;
    85         }
    86         return false;
    87 }
    8861
    8962//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.