From e36748a8eb65b7ee2b82b873d5e80f9c4e4093eb Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 16 Feb 2015 16:17:05 +0000 Subject: Fix crash when clang tries to build NSNumber literal after forward declaration Bug report: http://llvm.org/bugs/show_bug.cgi?id=22561 Clang tries to create ObjCBoxedExpression of type 'NSNumber' when 'NSNumber' has only forward declaration, this cause a crash later, when 'Sema' refers to a nil QualType of the whole expression. Please, refer to the bug report for the better explanation. llvm-svn: 229402 --- clang/test/SemaObjC/objc-literal-nsnumber.m | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'clang/test') diff --git a/clang/test/SemaObjC/objc-literal-nsnumber.m b/clang/test/SemaObjC/objc-literal-nsnumber.m index a2d37282b71..57bc07b139e 100644 --- a/clang/test/SemaObjC/objc-literal-nsnumber.m +++ b/clang/test/SemaObjC/objc-literal-nsnumber.m @@ -9,6 +9,24 @@ typedef unsigned int NSUInteger; typedef int NSInteger; #endif +void checkNSNumberUnavailableDiagnostic() { + id num = @1000; // expected-error {{NSNumber must be available to use Objective-C literals}} + + int x = 1000; + id num1 = @(x); // expected-error {{NSNumber must be available to use Objective-C literals}}\ + // expected-error {{illegal type 'int' used in a boxed expression}} +} + +@class NSNumber; + +void checkNSNumberFDDiagnostic() { + id num = @1000; // expected-error {{NSNumber must be available to use Objective-C literals}} + + int x = 1000; + id num1 = @(x); // expected-error {{declaration of 'numberWithInt:' is missing in NSNumber class}}\ + // expected-error {{illegal type 'int' used in a boxed expression}} +} + @interface NSObject + (NSObject*)nsobject; @end -- cgit v1.2.3