forked from OSchip/llvm-project
Don't warn about undefined varargs argument behavior in unreachable code.
Fixes <rdar://problem/12322000>. llvm-svn: 171831
This commit is contained in:
parent
f7e654e3a7
commit
a046169000
|
@ -9716,11 +9716,11 @@ ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc,
|
|||
if (TInfo->getType()->isSpecificBuiltinType(BuiltinType::Float))
|
||||
PromoteType = Context.DoubleTy;
|
||||
if (!PromoteType.isNull())
|
||||
Diag(TInfo->getTypeLoc().getBeginLoc(),
|
||||
diag::warn_second_parameter_to_va_arg_never_compatible)
|
||||
<< TInfo->getType()
|
||||
<< PromoteType
|
||||
<< TInfo->getTypeLoc().getSourceRange();
|
||||
DiagRuntimeBehavior(TInfo->getTypeLoc().getBeginLoc(), E,
|
||||
PDiag(diag::warn_second_parameter_to_va_arg_never_compatible)
|
||||
<< TInfo->getType()
|
||||
<< PromoteType
|
||||
<< TInfo->getTypeLoc().getSourceRange());
|
||||
}
|
||||
|
||||
QualType T = TInfo->getType().getNonLValueExprType(Context);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s -triple x86_64-apple-darwin9
|
||||
// expected-no-diagnostics
|
||||
|
||||
// From <rdar://problem/12322000>. Do not warn about undefined behavior of parameter
|
||||
// argument types in unreachable code in a macro.
|
||||
#define VA_ARG_RDAR12322000(Marker, TYPE) ((sizeof (TYPE) < sizeof (UINTN_RDAR12322000)) ? (TYPE)(__builtin_va_arg (Marker, UINTN_RDAR12322000)) : (TYPE)(__builtin_va_arg (Marker, TYPE)))
|
||||
|
||||
// 64-bit system
|
||||
typedef unsigned long long UINTN_RDAR12322000;
|
||||
|
||||
int test_VA_ARG_RDAR12322000 (__builtin_va_list Marker)
|
||||
{
|
||||
return VA_ARG_RDAR12322000 (Marker, short); // no-warning
|
||||
}
|
Loading…
Reference in New Issue