Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    raf39199d 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  2 18:13:15 2018
    13 // Update Count     : 29
     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//-----------------------------------------------------------------------------
     
    3736// Warnings
    3837
    39 enum class Severity {
    40         Suppress,
    41         Warn,
    42         Error,
    43         Critical
    44 };
    45 
    46 struct WarningData {
    47         const char * const name;
    48         const char * const message;
    49         const Severity default_severity;
    50 };
    51 
    52 constexpr WarningData WarningFormats[] = {
    53         {"self-assign"            , "self assignment of expression: %s"            , Severity::Warn},
    54         {"reference-conversion"   , "rvalue to reference conversion of rvalue: %s" , Severity::Warn},
    55         {"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",
    5642};
    5743
     
    6854);
    6955
    70 #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__)
    7158
    7259void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
    7360
    74 void SemanticWarning_SuppressAll   ();
    75 void SemanticWarning_EnableAll     ();
    76 void SemanticWarning_WarningAsError();
    77 void SemanticWarning_Set           (const char * const name, Severity s);
    78 
    79 // SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine.
    80 static inline bool SemanticWarning_Exist(const char * const name) {
    81         for ( const auto & w : WarningFormats ) {
    82                 if ( std::strcmp( name, w.name ) == 0 ) return true;
    83         }
    84         return false;
    85 }
    8661
    8762//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.