Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    r9dc31c10 r4358c1e  
    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 16 15:01:23 2018
     13// Update Count     : 30
    1414//
    1515
     
    1717
    1818#include "ErrorObjects.h"
     19#include <cstring>
    1920
    2021//-----------------------------------------------------------------------------
    2122// Errors
     23
     24extern bool SemanticErrorThrow;
    2225
    2326__attribute__((noreturn)) void SemanticError( CodeLocation location, std::string error );
     
    3639// Warnings
    3740
    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",
     41enum class Severity {
     42        Suppress,
     43        Warn,
     44        Error,
     45        Critical
     46};
     47
     48struct WarningData {
     49        const char * const name;
     50        const char * const message;
     51        const Severity default_severity;
     52};
     53
     54constexpr 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},
    4258};
    4359
     
    5470);
    5571
    56 // ## used here to allow empty __VA_ARGS__
    57 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], ## __VA_ARGS__)
     72#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, __VA_ARGS__)
    5873
    5974void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
    6075
     76void SemanticWarning_SuppressAll   ();
     77void SemanticWarning_EnableAll     ();
     78void SemanticWarning_WarningAsError();
     79void SemanticWarning_Set           (const char * const name, Severity s);
     80
     81// SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine.
     82static 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}
    6188
    6289//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.