Skip to content

Commit cbb99ef

Browse files
committed
Don't warn about undefined varargs argument behavior in unreachable code.
Fixes <rdar://problem/12322000>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171831 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent b9d61ca commit cbb99ef

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

lib/Sema/SemaExpr.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -9716,11 +9716,11 @@ ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc,
97169716
if (TInfo->getType()->isSpecificBuiltinType(BuiltinType::Float))
97179717
PromoteType = Context.DoubleTy;
97189718
if (!PromoteType.isNull())
9719-
Diag(TInfo->getTypeLoc().getBeginLoc(),
9720-
diag::warn_second_parameter_to_va_arg_never_compatible)
9721-
<< TInfo->getType()
9722-
<< PromoteType
9723-
<< TInfo->getTypeLoc().getSourceRange();
9719+
DiagRuntimeBehavior(TInfo->getTypeLoc().getBeginLoc(), E,
9720+
PDiag(diag::warn_second_parameter_to_va_arg_never_compatible)
9721+
<< TInfo->getType()
9722+
<< PromoteType
9723+
<< TInfo->getTypeLoc().getSourceRange());
97249724
}
97259725

97269726
QualType T = TInfo->getType().getNonLValueExprType(Context);

test/Sema/varargs_unreachable.c

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %clang_cc1 -fsyntax-only -verify %s -triple x86_64-apple-darwin9
2+
// expected-no-diagnostics
3+
4+
// From <rdar://problem/12322000>. Do not warn about undefined behavior of parameter
5+
// argument types in unreachable code in a macro.
6+
#define VA_ARG_RDAR12322000(Marker, TYPE) ((sizeof (TYPE) < sizeof (UINTN_RDAR12322000)) ? (TYPE)(__builtin_va_arg (Marker, UINTN_RDAR12322000)) : (TYPE)(__builtin_va_arg (Marker, TYPE)))
7+
8+
// 64-bit system
9+
typedef unsigned long long UINTN_RDAR12322000;
10+
11+
int test_VA_ARG_RDAR12322000 (__builtin_va_list Marker)
12+
{
13+
return VA_ARG_RDAR12322000 (Marker, short); // no-warning
14+
}

0 commit comments

Comments
 (0)