From 8a64f88aa9c97f031727ce145be1a76fd52470a6 Mon Sep 17 00:00:00 2001 From: Jordan Rose <jordan_rose@apple.com> Date: Wed, 8 Aug 2012 21:17:31 +0000 Subject: [PATCH] Implicitly annotate __CFStringMakeConstantString with format_arg(1). We handled the builtin version of this function in r157968, but the builtin isn't used when compiling as -fno-constant-cfstrings. This should complete <rdar://problem/6157200>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161525 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 7 +++++++ test/SemaObjC/format-strings-objc.m | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 2b38718db96..2ee9e84a61a 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -7974,6 +7974,13 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) { "printf", 2, Name->isStr("vasprintf") ? 0 : 3)); } + + if (Name->isStr("__CFStringMakeConstantString")) { + // We already have a __builtin___CFStringMakeConstantString, + // but builds that use -fno-constant-cfstrings don't go through that. + if (!FD->getAttr<FormatArgAttr>()) + FD->addAttr(::new (Context) FormatArgAttr(FD->getLocation(), Context, 1)); + } } TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, diff --git a/test/SemaObjC/format-strings-objc.m b/test/SemaObjC/format-strings-objc.m index 840694ac79a..7faa995002d 100644 --- a/test/SemaObjC/format-strings-objc.m +++ b/test/SemaObjC/format-strings-objc.m @@ -34,9 +34,9 @@ extern void CFStringCreateWithFormat(CFStringRef format, ...) __attribute__((for #define CFSTR(cStr) ((CFStringRef) __builtin___CFStringMakeConstantString ("" cStr "")) // This function is used instead of the builtin if -fno-constant-cfstrings. -// The definition on Mac OS X is NOT annotated with format_arg as of 10.7, -// but if it were, we want the same checking behavior as with the builtin. -extern CFStringRef __CFStringMakeConstantString(const char *) __attribute__((format_arg(1))); +// The definition on Mac OS X is NOT annotated with format_arg as of 10.8, +// but clang will implicitly add the attribute if it's not written. +extern CFStringRef __CFStringMakeConstantString(const char *); int printf(const char * restrict, ...) ; -- GitLab