mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-07 08:34:59 +00:00
Objective-C [IRGen]. Fixes a crash in IRGen involving use of
'typeof' to extract type of an @encode expression used in an initializer. // rdar://16655340 llvm-svn: 207004
This commit is contained in:
parent
eb08c4f038
commit
9da2a799ab
@ -836,7 +836,10 @@ public:
|
||||
// as an inline array.
|
||||
std::string Str;
|
||||
CGM.getContext().getObjCEncodingForType(E->getEncodedType(), Str);
|
||||
const ConstantArrayType *CAT = cast<ConstantArrayType>(E->getType());
|
||||
QualType T = E->getType();
|
||||
if (T->getTypeClass() == Type::TypeOfExpr)
|
||||
T = cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType();
|
||||
const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
|
||||
|
||||
// Resize the string to the right size, adding zeros at the end, or
|
||||
// truncating as needed.
|
||||
|
@ -53,3 +53,14 @@ typedef struct
|
||||
}
|
||||
@end
|
||||
// CHECK: private global [39 x i8] c"{?=\22presentationInstance\22^{SCNCamera}}\00"
|
||||
|
||||
// rdar://16655340
|
||||
int i;
|
||||
typeof(@encode(typeof(i))) e = @encode(typeof(i));
|
||||
const char * Test()
|
||||
{
|
||||
return e;
|
||||
}
|
||||
// CHECK: @e = global [2 x i8] c"i\00", align 1
|
||||
// CHECK: define i8* @Test()
|
||||
// CHECK: ret i8* getelementptr inbounds ([2 x i8]* @e, i32 0, i32 0)
|
||||
|
26
clang/test/SemaObjC/encode-typeof-test.m
Normal file
26
clang/test/SemaObjC/encode-typeof-test.m
Normal file
@ -0,0 +1,26 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
|
||||
// rdar://16655340
|
||||
@protocol X, Y, Z;
|
||||
@class Foo;
|
||||
|
||||
@protocol Proto
|
||||
@end
|
||||
|
||||
@interface Intf <Proto>
|
||||
{
|
||||
id <X> IVAR_x;
|
||||
id <X, Y> IVAR_xy;
|
||||
id <X, Y, Z> IVAR_xyz;
|
||||
Foo <X, Y, Z> *IVAR_Fooxyz;
|
||||
Class <X> IVAR_Classx;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation Intf
|
||||
@end
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
typeof(@encode(typeof(i))) e = @encode(typeof(Intf)); // expected-warning {{initializer-string for char array is too long}}
|
||||
}
|
Loading…
Reference in New Issue
Block a user