return declaration;
}
+static bool is_sym_main(const symbol_t *const sym)
+{
+ return strcmp(sym->string, "main") == 0;
+}
+
static declaration_t *internal_record_declaration(
declaration_t *const declaration,
const bool is_function_definition)
case STORAGE_CLASS_EXTERN:
if (is_function_definition) {
if (warning.missing_prototypes &&
- prev_type->function.unspecified_parameters) {
+ prev_type->function.unspecified_parameters &&
+ !is_sym_main(symbol)) {
warningf(declaration->source_position, "no previous prototype for '%#T'", type, symbol);
}
} else if (new_storage_class == STORAGE_CLASS_NONE) {
}
} else if (is_function_definition &&
declaration->storage_class != STORAGE_CLASS_STATIC) {
- if (warning.missing_prototypes) {
+ if (warning.missing_prototypes && !is_sym_main(symbol)) {
warningf(declaration->source_position, "no previous prototype for '%#T'", type, symbol);
- } else if (warning.missing_declarations) {
+ } else if (warning.missing_declarations && !is_sym_main(symbol)) {
warningf(declaration->source_position, "no previous declaration for '%#T'", type, symbol);
}
}