aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaDecl.cpp6
-rw-r--r--test/Sema/const-ptr-int-ptr-cast.c4
-rw-r--r--test/Sema/static-init.c9
3 files changed, 15 insertions, 4 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 3130f02bef..4ec2dc6968 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -2371,6 +2371,12 @@ bool Sema::CheckArithmeticConstantExpression(const Expr* Init) {
}
bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
+ if (Init->isConstantInitializer(Context)) {
+ return false;
+ }
+ InitializerElementNotConstant(Init);
+ return true;
+
if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Init))
Init = DIE->getInit();
diff --git a/test/Sema/const-ptr-int-ptr-cast.c b/test/Sema/const-ptr-int-ptr-cast.c
index 6bf44b05b3..3590583cd5 100644
--- a/test/Sema/const-ptr-int-ptr-cast.c
+++ b/test/Sema/const-ptr-int-ptr-cast.c
@@ -1,3 +1,5 @@
// RUN: clang -fsyntax-only -verify %s
-char *a = (void*)(unsigned long long)(void*)&a;
+#include <stdint.h>
+
+char *a = (void*)(uintptr_t)(void*)&a;
diff --git a/test/Sema/static-init.c b/test/Sema/static-init.c
index f7648a6d35..9ab3146ee7 100644
--- a/test/Sema/static-init.c
+++ b/test/Sema/static-init.c
@@ -1,9 +1,12 @@
// RUN: clang -arch i386 -fsyntax-only -verify %s
+
+#include <stdint.h>
+
static int f = 10;
static int b = f; // expected-error {{initializer element is not a compile-time constant}}
-float r = (float) &r; // FIXME: should give an error: ptr value used where a float was expected
-long long s = (long long) &s;
+float r = (float) &r; // expected-error {{initializer element is not a compile-time constant}}
+intptr_t s = (intptr_t) &s;
_Bool t = &t;
@@ -16,5 +19,5 @@ struct foo {
};
union bar u[1];
-struct foo x = {(long) u}; // no-error
+struct foo x = {(intptr_t) u}; // no-error
struct foo y = {(char) u}; // expected-error {{initializer element is not a compile-time constant}}