diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-06-27 20:23:58 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-06-27 20:23:58 +0000 |
commit | 83ea530f9da1b8ca57773bf53418ce9fc98f46ac (patch) | |
tree | 0e914b2c37ee777b1bea473cf0040320a664daa4 | |
parent | 12d2cc71bfeb1e7be9ce00fc52feab50941cac24 (diff) |
Check for non-POD vararg argument type after default argument promotion, not
before, so we don't incorrectly think arguments of function type are non-POD.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159290 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/varargs.c | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 2a7a8b9f19..aec941c4c1 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -679,7 +679,7 @@ ExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, // Diagnostics regarding non-POD argument types are // emitted along with format string checking in Sema::CheckFunctionCall(). - if (isValidVarArgType(Ty) == VAK_Invalid) { + if (isValidVarArgType(E->getType()) == VAK_Invalid) { // Turn this into a trap. CXXScopeSpec SS; SourceLocation TemplateKWLoc; diff --git a/test/CodeGen/varargs.c b/test/CodeGen/varargs.c index b3dba240b5..b6973d8337 100644 --- a/test/CodeGen/varargs.c +++ b/test/CodeGen/varargs.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -emit-llvm -o - %s +// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s // PR6433 - Don't crash on va_arg(typedef). @@ -9,3 +9,9 @@ void focus_changed_cb () { mfloat = __builtin_va_arg((pa), gdouble); } +void vararg(int, ...); +void function_as_vararg() { + // CHECK: define {{.*}}function_as_vararg + // CHECK-NOT: llvm.trap + vararg(0, focus_changed_cb); +} |