From ca305f5bb0893e41a5e5695d1dabe50853dfd93d Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Sat, 25 Apr 2015 20:20:04 +0000 Subject: [PATCH] [Sema] Check if a builtin is FunctionPrototype(). Don't assume it's always is. This prevents a crash in Sema while trying to merge return type for a builtin w/out function prototype. PR: 23086 Differential Revision: http://reviews.llvm.org/D9235 Reviewed by: rsmith git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235806 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 2 +- test/Sema/crash-invalid-builtin.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 test/Sema/crash-invalid-builtin.c diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 6916710036..339280614f 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1749,7 +1749,7 @@ NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Loc, Loc, II, R, /*TInfo=*/nullptr, SC_Extern, false, - /*hasPrototype=*/true); + R->isFunctionProtoType()); New->setImplicit(); // Create Decl objects for each parameter, adding them to the diff --git a/test/Sema/crash-invalid-builtin.c b/test/Sema/crash-invalid-builtin.c new file mode 100644 index 0000000000..1c5221fa40 --- /dev/null +++ b/test/Sema/crash-invalid-builtin.c @@ -0,0 +1,4 @@ +// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fsyntax-only -verify %s +// PR23086 + +__builtin_isinf(...); // expected-warning {{type specifier missing, defaults to 'int'}} expected-error {{ISO C requires a named parameter before '...'}} // expected-error {{conflicting types for '__builtin_isinf'}} // expected-note {{'__builtin_isinf' is a builtin with type 'int ()'}} -- 2.40.0