r199850 - Don't forget about a builtin if we're about to redeclare it and we couldn't

Alp Toker alp at nuanti.com
Wed Jan 22 15:41:41 PST 2014


On 22/01/2014 23:07, Richard Smith wrote:
> Author: rsmith
> Date: Wed Jan 22 17:07:19 2014
> New Revision: 199850
>
> URL: http://llvm.org/viewvc/llvm-project?rev=199850&view=rev
> Log:
> Don't forget about a builtin if we're about to redeclare it and we couldn't
> create an implicit declaration of it (because some type it depends on is
> unavailable). This had the effect of causing us to not implicitly give it the
> right attributes. It turns out that glibc's __sigsetjmp is declared before
> sigjmp_buf is declared, and this resulted in us not implicitly giving it
> __attribute__((returns_twice)), which in turn resulted in miscompiles in any C
> code calling glibc's sigsetjmp.

Do you suppose we should provide a DefaultIgnore warning for 
ForgetBuiltin to assist system header developers? It looks a bit 
hit-and-miss at the moment.

Alp.


>
> (See also the vaguely-related sourceware.org/PR4662.)
>
> Modified:
>      cfe/trunk/lib/Sema/SemaLookup.cpp
>      cfe/trunk/test/Sema/implicit-builtin-decl.c
>
> Modified: cfe/trunk/lib/Sema/SemaLookup.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=199850&r1=199849&r2=199850&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaLookup.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaLookup.cpp Wed Jan 22 17:07:19 2014
> @@ -545,14 +545,6 @@ static bool LookupBuiltin(Sema &S, Looku
>             R.addDecl(D);
>             return true;
>           }
> -
> -        if (R.isForRedeclaration()) {
> -          // If we're redeclaring this function anyway, forget that
> -          // this was a builtin at all.
> -          S.Context.BuiltinInfo.ForgetBuiltin(BuiltinID, S.Context.Idents);
> -        }
> -
> -        return false;
>         }
>       }
>     }
>
> Modified: cfe/trunk/test/Sema/implicit-builtin-decl.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/implicit-builtin-decl.c?rev=199850&r1=199849&r2=199850&view=diff
> ==============================================================================
> --- cfe/trunk/test/Sema/implicit-builtin-decl.c (original)
> +++ cfe/trunk/test/Sema/implicit-builtin-decl.c Wed Jan 22 17:07:19 2014
> @@ -1,4 +1,6 @@
>   // RUN: %clang_cc1 -fsyntax-only -verify %s
> +// RUN: not %clang_cc1 -fsyntax-only -ast-dump %s | FileCheck %s
> +
>   void f() {
>     int *ptr = malloc(sizeof(int) * 10); // expected-warning{{implicitly declaring library function 'malloc' with type}} \
>     // expected-note{{please include the header <stdlib.h> or explicitly provide a declaration for 'malloc'}} \
> @@ -57,3 +59,10 @@ void snprintf() { }
>   void longjmp(); // expected-warning{{declaration of built-in function 'longjmp' requires inclusion of the header <setjmp.h>}}
>   
>   extern float fmaxf(float, float);
> +
> +struct __jmp_buf_tag {};
> +void sigsetjmp(struct __jmp_buf_tag[1], int); // expected-warning{{declaration of built-in function 'sigsetjmp' requires inclusion of the header <setjmp.h>}}
> +
> +// CHECK:     FunctionDecl {{.*}} <line:[[@LINE-2]]:1, col:44> sigsetjmp '
> +// CHECK-NOT: FunctionDecl
> +// CHECK:     ReturnsTwiceAttr {{.*}} <{{.*}}> Implicit
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list