On Fri, Oct 1, 2010 at 12:13 AM, Chris Lattner <[email protected]> wrote:
> Author: lattner
> Date: Fri Oct  1 02:13:18 2010
> New Revision: 115302
>
> URL: http://llvm.org/viewvc/llvm-project?rev=115302&view=rev
> Log:
> Various builtins a require an integer constant.  Not providing
> one results in an obscure error from the backend that doesn't make
> sense.  Capture this information in the .def files for builtins with
> a new "I" modifier letter indicating the an argument needs to be an ICE.
>
> Nothing uses this yet, but sema will eventually enforce this (eliminating
> some special cases from semachecking.cpp) and codegen will use this to
> force an ICE value, preventing backend error messages.
>
> Modified:
>    cfe/trunk/include/clang/Basic/Builtins.def
>    cfe/trunk/include/clang/Basic/BuiltinsX86.def
>    cfe/trunk/lib/AST/ASTContext.cpp
>
> Modified: cfe/trunk/include/clang/Basic/Builtins.def
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def?rev=115302&r1=115301&r2=115302&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/Builtins.def (original)
> +++ cfe/trunk/include/clang/Basic/Builtins.def Fri Oct  1 02:13:18 2010
> @@ -38,12 +38,13 @@
>  //  SJ -> sigjmp_buf
>  //  . -> "...".  This may only occur at the end of the function list.
>  //
> -// Types maybe prefixed with the following modifiers:
> +// Types may be prefixed with the following modifiers:
>  //  L   -> long (e.g. Li for 'long int')
>  //  LL  -> long long
>  //  LLL -> __int128_t (e.g. LLLi)
>  //  S   -> signed
>  //  U   -> unsigned
> +//  I   -> Required to constant fold to an integer constant expression.
>  //
>  // Types may be postfixed with the following modifiers:
>  // * -> pointer (optionally followed by an address space number)
> @@ -367,7 +368,7 @@
>  BUILTIN(__builtin___vprintf_chk, "iicC*a", "FP:1:")
>
>  BUILTIN(__builtin_expect, "LiLiLi"   , "nc")
> -BUILTIN(__builtin_prefetch, "vvC*.", "nc")
> +BUILTIN(__builtin_prefetch, "vvC*.", "nIc")

Err, is this change really intentional?  For functions with variable
parameters, we should probably just depend on the SemaChecking
infrastructure to make the appropriate checks.

-Eli

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to