diff options
author | Hans Wennborg <hans@hanshq.net> | 2018-11-27 14:01:40 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2018-11-27 14:01:40 +0000 |
commit | 8c79706e89dd2792bcc7b1e44d8f5db6abaf1617 (patch) | |
tree | b1ebe35d9001f44880de2719abd98aeaa260270a /clang/test/Sema/offsetof-64.c | |
parent | 032f3e7fd8a12ceab800b0d9c3aca0f769f7b7cc (diff) | |
download | bcm5719-llvm-8c79706e89dd2792bcc7b1e44d8f5db6abaf1617.tar.gz bcm5719-llvm-8c79706e89dd2792bcc7b1e44d8f5db6abaf1617.zip |
Revert r347417 "Re-Reinstate 347294 with a fix for the failures."
This caused a miscompile in Chrome (see crbug.com/908372) that's
illustrated by this small reduction:
static bool f(int *a, int *b) {
return !__builtin_constant_p(b - a) || (!(b - a));
}
int arr[] = {1,2,3};
bool g() {
return f(arr, arr + 3);
}
$ clang -O2 -S -emit-llvm a.cc -o -
g() should return true, but after r347417 it became false for some reason.
This also reverts the follow-up commits.
r347417:
> Re-Reinstate 347294 with a fix for the failures.
>
> Don't try to emit a scalar expression for a non-scalar argument to
> __builtin_constant_p().
>
> Third time's a charm!
r347446:
> The result of is.constant() is unsigned.
r347480:
> A __builtin_constant_p() returns 0 with a function type.
r347512:
> isEvaluatable() implies a constant context.
>
> Assume that we're in a constant context if we're asking if the expression can
> be compiled into a constant initializer. This fixes the issue where a
> __builtin_constant_p() in a compound literal was diagnosed as not being
> constant, even though it's always possible to convert the builtin into a
> constant.
r347531:
> A "constexpr" is evaluated in a constant context. Make sure this is reflected
> if a __builtin_constant_p() is a part of a constexpr.
llvm-svn: 347656
Diffstat (limited to 'clang/test/Sema/offsetof-64.c')
0 files changed, 0 insertions, 0 deletions