[cfe-commits] r78542 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDeclAttr.cpp test/Sema/attr-malloc.c

Chris Lattner clattner at apple.com
Tue Aug 11 13:12:03 PDT 2009


On Aug 9, 2009, at 3:36 PM, Ryan Flynn wrote:
> Author: pizza
> Date: Sun Aug  9 17:36:29 2009
> New Revision: 78542
>
> URL: http://llvm.org/viewvc/llvm-project?rev=78542&view=rev
> Log:
> warn, as gcc does, if __attribute__((malloc)) applied to function  
> returning non-pointer type

Thanks Ryan.  If "d" is not a functiondecl, does it make sense to  
reject (with a warning) the attribute?

-Chris

>
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>    cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>    cfe/trunk/test/Sema/attr-malloc.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=78542&r1=78541&r2=78542&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sun Aug  9  
> 17:36:29 2009
> @@ -605,6 +605,8 @@
>   "'%0' attribute invalid on this declaration, requires typedef or  
> value">;
> def warn_attribute_nonnull_no_pointers : Warning<
>   "'nonnull' attribute applied to function with no pointer  
> arguments">;
> +def warn_attribute_malloc_pointer_only : Warning<
> +  "'malloc' attribute only applies to functions returning pointer  
> type">;
> def warn_transparent_union_nonpointer : Warning<
>   "'transparent_union' attribute support incomplete; only supported  
> for "
>   "pointer unions">;
>
> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=78542&r1=78541&r2=78542&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Sun Aug  9 17:36:29 2009
> @@ -437,6 +437,13 @@
>     return;
>   }
>
> +  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(d)) {
> +    if (!FD->getResultType()->isPointerType()) {
> +      S.Diag(Attr.getLoc(),  
> diag::warn_attribute_malloc_pointer_only);
> +      return;
> +    }
> +  }
> +
>   d->addAttr(::new (S.Context) MallocAttr());
> }
>
>
> Modified: cfe/trunk/test/Sema/attr-malloc.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-malloc.c?rev=78542&r1=78541&r2=78542&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/test/Sema/attr-malloc.c (original)
> +++ cfe/trunk/test/Sema/attr-malloc.c Sun Aug  9 17:36:29 2009
> @@ -5,6 +5,12 @@
>
> int no_vars __attribute((malloc)); // expected-warning {{only  
> applies to function types}}
>
> +void  returns_void  (void) __attribute((malloc)); // expected- 
> warning {{functions returning pointer type}}
> +int   returns_int   (void) __attribute((malloc)); // expected- 
> warning {{functions returning pointer type}}
> +int * returns_intptr(void) __attribute((malloc));
> +typedef int * iptr;
> +iptr  returns_iptr  (void) __attribute((malloc));
> +
> __attribute((malloc))
> void * xalloc(unsigned n) { return malloc(n); }
> // RUN: grep 'define noalias .* @xalloc(' %t &&
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list