forked from OSchip/llvm-project
Tweak warning text for returning incomplete type from extern "C" functions.
A warning was added in r150128 for returning non-C compatible user-defined types from functions with C linkage. This makes the text more clear for the case when the type isn't decidedly non-C compatible, but incomplete. llvm-svn: 160681
This commit is contained in:
parent
0a36302ae0
commit
84ce606b91
|
@ -192,6 +192,9 @@ def warn_return_value_size: Warning<
|
|||
def warn_return_value_udt: Warning<
|
||||
"%0 has C-linkage specified, but returns user-defined type %1 which is "
|
||||
"incompatible with C">, InGroup<ReturnTypeCLinkage>;
|
||||
def warn_return_value_udt_incomplete: Warning<
|
||||
"%0 has C-linkage specified, but returns incomplete type %1 which could be "
|
||||
"incompatible with C">, InGroup<ReturnTypeCLinkage>;
|
||||
def warn_implicit_function_decl : Warning<
|
||||
"implicit declaration of function %0">,
|
||||
InGroup<ImplicitFunctionDeclare>, DefaultIgnore;
|
||||
|
|
|
@ -6086,10 +6086,11 @@ bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
|
|||
// compatible, and if it does, warn the user.
|
||||
if (NewFD->isExternC()) {
|
||||
QualType R = NewFD->getResultType();
|
||||
if (!R.isPODType(Context) &&
|
||||
!R->isVoidType())
|
||||
Diag( NewFD->getLocation(), diag::warn_return_value_udt )
|
||||
<< NewFD << R;
|
||||
if (R->isIncompleteType() && !R->isVoidType())
|
||||
Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete)
|
||||
<< NewFD << R;
|
||||
else if (!R.isPODType(Context) && !R->isVoidType())
|
||||
Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;
|
||||
}
|
||||
}
|
||||
return Redeclaration;
|
||||
|
|
|
@ -36,3 +36,5 @@ extern "C" void f7( U u );
|
|||
extern "C" double f8(void);
|
||||
extern "C" long long f11( void );
|
||||
extern "C" A *f10( void );
|
||||
|
||||
extern "C" struct mypodstruct f12(); // expected-warning {{'f12' has C-linkage specified, but returns incomplete type 'struct mypodstruct' which could be incompatible with C}}
|
||||
|
|
Loading…
Reference in New Issue