forked from OSchip/llvm-project
fix PR7885, rejecting invalid uses of __builtin_constant_p.
llvm-svn: 116317
This commit is contained in:
parent
636d6ed0c1
commit
17c0eac879
|
@ -198,6 +198,16 @@ Sema::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
|
|||
if (SemaBuiltinLongjmp(TheCall))
|
||||
return ExprError();
|
||||
break;
|
||||
case Builtin::BI__builtin_constant_p:
|
||||
if (TheCall->getNumArgs() == 0)
|
||||
return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
|
||||
<< 0 /*function call*/ << 1 << 0 << TheCall->getSourceRange();
|
||||
if (TheCall->getNumArgs() > 1)
|
||||
return Diag(TheCall->getArg(1)->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/ << 1 << TheCall->getNumArgs()
|
||||
<< TheCall->getArg(1)->getSourceRange();
|
||||
break;
|
||||
case Builtin::BI__sync_fetch_and_add:
|
||||
case Builtin::BI__sync_fetch_and_sub:
|
||||
case Builtin::BI__sync_fetch_and_or:
|
||||
|
|
|
@ -95,3 +95,10 @@ void test14() {
|
|||
void test15(const char *s) {
|
||||
__builtin_printf("string is %s\n", s);
|
||||
}
|
||||
|
||||
// PR7885
|
||||
int test16() {
|
||||
return __builtin_constant_p() + // expected-error{{too few arguments}}
|
||||
__builtin_constant_p(1, 2); // expected-error {{too many arguments}}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ struct s {
|
|||
|
||||
EVAL_EXPR(19, ((int)&*(char*)10 == 10 ? 1 : -1));
|
||||
|
||||
EVAL_EXPR(20, __builtin_constant_p(*((int*) 10), -1, 1));
|
||||
EVAL_EXPR(20, __builtin_constant_p(*((int*) 10)));
|
||||
|
||||
EVAL_EXPR(21, (__imag__ 2i) == 2 ? 1 : -1);
|
||||
|
||||
|
|
Loading…
Reference in New Issue