Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    r9dc31c10 raf39199d  
    77// SemanticError.h --
    88//
    9 // Author           : Richard C. Bilson
     9// Author           : Thierry Delisle
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 18 16:28:16 2018
    13 // Update Count     : 18
     12// Last Modified On : Wed May  2 18:13:15 2018
     13// Update Count     : 29
    1414//
    1515
     
    1717
    1818#include "ErrorObjects.h"
     19#include <cstring>
    1920
    2021//-----------------------------------------------------------------------------
     
    3637// Warnings
    3738
    38 constexpr 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",
     39enum class Severity {
     40        Suppress,
     41        Warn,
     42        Error,
     43        Critical
     44};
     45
     46struct WarningData {
     47        const char * const name;
     48        const char * const message;
     49        const Severity default_severity;
     50};
     51
     52constexpr 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},
    4256};
    4357
     
    5468);
    5569
    56 // ## used here to allow empty __VA_ARGS__
    57 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], ## __VA_ARGS__)
     70#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, __VA_ARGS__)
    5871
    5972void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
    6073
     74void SemanticWarning_SuppressAll   ();
     75void SemanticWarning_EnableAll     ();
     76void SemanticWarning_WarningAsError();
     77void SemanticWarning_Set           (const char * const name, Severity s);
     78
     79// SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine.
     80static 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}
    6186
    6287//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.