diff options
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 2 | ||||
-rw-r--r-- | clang/test/Sema/wchar_size.c | 13 |
3 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 2b4bc89aace..f76d320c386 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1444,8 +1444,6 @@ QualType ASTContext::getWCharType() const { if (LangOpts.CPlusPlus) return WCharTy; - // FIXME: In C, shouldn't WCharTy just be a typedef of the target's - // wide-character type? return getFromTargetType(Target.getWCharType()); } diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index eeda1d05ca3..1f4ab078efa 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -48,7 +48,7 @@ static Expr *IsStringInit(Expr *Init, QualType DeclType, ASTContext &Context) { // wchar_t array can be initialized with a wide string: C99 6.7.8p15: // "An array with element type compatible with wchar_t may be initialized by a // wide string literal, optionally enclosed in braces." - if (Context.typesAreCompatible(Context.WCharTy, AT->getElementType())) + if (Context.typesAreCompatible(Context.getWCharType(), AT->getElementType())) // Only allow wchar_t x[] = L"foo"; not wchar_t x[] = "foo"; return Init; diff --git a/clang/test/Sema/wchar_size.c b/clang/test/Sema/wchar_size.c index a4041b976da..b7171fec7a5 100644 --- a/clang/test/Sema/wchar_size.c +++ b/clang/test/Sema/wchar_size.c @@ -1,3 +1,12 @@ -// RUN: clang %s -fsyntax-only -verify -triple=i686-apple-darwin9 +// RUN: clang %s -fsyntax-only -verify +#include <wchar.h> -int check_wchar_size[sizeof(*L"") == 4 ? 1 : -1]; +int check_wchar_size[sizeof(*L"") == sizeof(wchar_t) ? 1 : -1]; + +void foo() { + int t1[] = L"x"; + wchar_t tab[] = L"x"; + + int t2[] = "x"; // expected-error {{initialization}} + char t3[] = L"x"; // expected-error {{initialization}} +} |