case SPECIFIER_UNSIGNED | SPECIFIER_LONG | SPECIFIER_INT:
atomic_type = ATOMIC_TYPE_ULONG;
break;
+
case SPECIFIER_LONG | SPECIFIER_LONG_LONG:
case SPECIFIER_SIGNED | SPECIFIER_LONG | SPECIFIER_LONG_LONG:
case SPECIFIER_LONG | SPECIFIER_LONG_LONG | SPECIFIER_INT:
case SPECIFIER_SIGNED | SPECIFIER_LONG | SPECIFIER_LONG_LONG
| SPECIFIER_INT:
atomic_type = ATOMIC_TYPE_LONGLONG;
- break;
+ goto warn_about_long_long;
+
case SPECIFIER_UNSIGNED | SPECIFIER_LONG | SPECIFIER_LONG_LONG:
case SPECIFIER_UNSIGNED | SPECIFIER_LONG | SPECIFIER_LONG_LONG
| SPECIFIER_INT:
atomic_type = ATOMIC_TYPE_ULONGLONG;
+warn_about_long_long:
+ if (warning.long_long) {
+ warningf(&specifiers->source_position,
+ "ISO C90 does not support 'long long'");
+ }
break;
case SPECIFIER_UNSIGNED | SPECIFIER_INT8:
.format = true,
.implicit_function_declaration = true,
.implicit_int = true,
+ .long_long = false,
.main = true,
.missing_declarations = false,
.missing_prototypes = false,
}
OPT("implicit-function-declaration", implicit_function_declaration);
OPT("implicit-int", implicit_int);
+ OPT("long-long", long_long);
OPT("main", main);
OPT("missing-declarations", missing_declarations);
OPT("missing-prototypes", missing_prototypes);
bool implicit_int:1; /**< Warn when a declaration does not specify a type */
#if 0 // TODO
bool inline:1; /**< Warn if a function can not be inlined and it was declared as inline */
- bool long_long:1; /**< Warn if 'long long' type is used */
#endif
+ bool long_long:1; /**< Warn if 'long long' type is used */
bool main:1; /**< Warn if the type of 'main' is suspicious */
#if 0 // TODO
bool missing_braces:1; /**< Warn if an aggregate or union initializer is not fully bracketed */