diff --git a/regression/ansi-c/invalid_use_of_void1/main.c b/regression/ansi-c/invalid_use_of_void1/main.c index b07e94f28da..e357d2c7e67 100644 --- a/regression/ansi-c/invalid_use_of_void1/main.c +++ b/regression/ansi-c/invalid_use_of_void1/main.c @@ -1,3 +1,5 @@ +extern void this_is_ok; + struct a { #ifdef void_member diff --git a/src/ansi-c/c_typecheck_base.cpp b/src/ansi-c/c_typecheck_base.cpp index db5d690a867..1286b900eff 100644 --- a/src/ansi-c/c_typecheck_base.cpp +++ b/src/ansi-c/c_typecheck_base.cpp @@ -103,7 +103,7 @@ void c_typecheck_baset::typecheck_symbol(symbolt &symbol) symbol.pretty_name=new_name; } - if(!symbol.is_type && symbol.type.id() == ID_empty) + if(!symbol.is_type && !symbol.is_extern && symbol.type.id() == ID_empty) { error().source_location = symbol.location; error() << "void-typed symbol not permitted" << eom; diff --git a/src/cpp/cpp_typecheck_code.cpp b/src/cpp/cpp_typecheck_code.cpp index 1e35036ceb9..245729dbf8a 100644 --- a/src/cpp/cpp_typecheck_code.cpp +++ b/src/cpp/cpp_typecheck_code.cpp @@ -448,7 +448,7 @@ void cpp_typecheckt::typecheck_decl(codet &code) if(is_typedef) continue; - if(!symbol.is_type && symbol.type.id() == ID_empty) + if(!symbol.is_type && !symbol.is_extern && symbol.type.id() == ID_empty) { error().source_location = symbol.location; error() << "void-typed symbol not permitted" << eom; diff --git a/src/cpp/cpp_typecheck_declaration.cpp b/src/cpp/cpp_typecheck_declaration.cpp index 59f0ede58af..dcac5fa828d 100644 --- a/src/cpp/cpp_typecheck_declaration.cpp +++ b/src/cpp/cpp_typecheck_declaration.cpp @@ -148,7 +148,7 @@ void cpp_typecheckt::convert_non_template_declaration( declaration_type, declaration.storage_spec(), declaration.member_spec(), declarator); - if(!symbol.is_type && symbol.type.id() == ID_empty) + if(!symbol.is_type && !symbol.is_extern && symbol.type.id() == ID_empty) { error().source_location = symbol.location; error() << "void-typed symbol not permitted" << eom;