mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 04:25:45 -04:00

defined here, but not semantically, so new struct S {}; is always ill-formed, even if there is a struct S in scope. We also had a couple of bugs in ParseOptionalTypeSpecifier caused by it being under-loved (due to it only being used in a few places) so merge it into ParseDeclarationSpecifiers with a new DeclSpecContext. To avoid regressing, this required improving ParseDeclarationSpecifiers' diagnostics in some cases. This also required teaching ParseSpecifierQualifierList about constexpr... which incidentally fixes an issue where we'd allow the constexpr specifier in other bad places. llvm-svn: 152549
28 lines
1.3 KiB
C
28 lines
1.3 KiB
C
// RUN: %clang_cc1 %s -verify -fsyntax-only
|
|
|
|
typedef struct _zend_module_entry zend_module_entry;
|
|
struct _zend_module_entry {
|
|
_efree((p)); // expected-error{{type name requires a specifier or qualifier}} \
|
|
expected-warning {{type specifier missing, defaults to 'int'}}
|
|
|
|
};
|
|
typedef struct _zend_function_entry { } zend_function_entry;
|
|
typedef struct _zend_pcre_globals { } zend_pcre_globals;
|
|
zend_pcre_globals pcre_globals;
|
|
|
|
static void zm_globals_ctor_pcre(zend_pcre_globals *pcre_globals ) { }
|
|
static void zm_globals_dtor_pcre(zend_pcre_globals *pcre_globals ) { }
|
|
static void zm_info_pcre(zend_module_entry *zend_module ) { }
|
|
static int zm_startup_pcre(int type, int module_number ) { }
|
|
|
|
static int zm_shutdown_pcre(int type, int module_number ) {
|
|
zend_function_entry pcre_functions[] = {{ }; // expected-error{{expected '}'}} expected-note {{to match this '{'}}
|
|
zend_module_entry pcre_module_entry = {
|
|
sizeof(zend_module_entry), 20071006, 0, 0, ((void *)0), ((void *)0),
|
|
"pcre", pcre_functions, zm_startup_pcre, zm_shutdown_pcre, ((void *)0),
|
|
((void *)0), zm_info_pcre, ((void *)0), sizeof(zend_pcre_globals), &pcre_globals,
|
|
((void (*)(void* ))(zm_globals_ctor_pcre)), ((void (*)(void* ))(zm_globals_dtor_pcre)),
|
|
((void *)0), 0, 0, ((void *)0), 0
|
|
};
|
|
}
|