| author | |
| committer | |
| log | 4ab2f947f9fcd2c6a4181c509d7c1ab27c6e4d58 |
| tree | f089c88ba379215a5eba193456730d0ec27874cc |
| parent | c0654d2db2cd66ee59f2147fbbb19d890e70bed1 |
| signature | Commit is signed but in an unrecognized format. |
Closes #59795 files changed, 55 insertions(+), 2 deletions(-)
src-self-hosted/clang.zig+9| ... | @@ -773,6 +773,14 @@ pub const ZigClangExpr_ConstExprUsage = extern enum { | ... | @@ -773,6 +773,14 @@ pub const ZigClangExpr_ConstExprUsage = extern enum { |
| 773 | EvaluateForMangling, | 773 | EvaluateForMangling, |
| 774 | }; | 774 | }; |
| 775 | 775 | ||
| 776 | pub const ZigClangUnaryExprOrTypeTrait_Kind = extern enum { | ||
| 777 | SizeOf, | ||
| 778 | AlignOf, | ||
| 779 | VecStep, | ||
| 780 | OpenMPRequiredSimdAlign, | ||
| 781 | PreferredAlignOf, | ||
| 782 | }; | ||
| 783 | |||
| 776 | pub extern fn ZigClangSourceManager_getSpellingLoc(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) struct_ZigClangSourceLocation; | 784 | pub extern fn ZigClangSourceManager_getSpellingLoc(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) struct_ZigClangSourceLocation; |
| 777 | pub extern fn ZigClangSourceManager_getFilename(self: *const struct_ZigClangSourceManager, SpellingLoc: struct_ZigClangSourceLocation) ?[*:0]const u8; | 785 | pub extern fn ZigClangSourceManager_getFilename(self: *const struct_ZigClangSourceManager, SpellingLoc: struct_ZigClangSourceLocation) ?[*:0]const u8; |
| 778 | pub extern fn ZigClangSourceManager_getSpellingLineNumber(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint; | 786 | pub extern fn ZigClangSourceManager_getSpellingLineNumber(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint; |
| ... | @@ -1170,6 +1178,7 @@ pub extern fn ZigClangCallExpr_getArgs(*const ZigClangCallExpr) [*]const *const | ... | @@ -1170,6 +1178,7 @@ pub extern fn ZigClangCallExpr_getArgs(*const ZigClangCallExpr) [*]const *const |
| 1170 | 1178 | ||
| 1171 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangQualType; | 1179 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangQualType; |
| 1172 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangSourceLocation; | 1180 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangSourceLocation; |
| 1181 | pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getKind(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangUnaryExprOrTypeTrait_Kind; | ||
| 1173 | 1182 | ||
| 1174 | pub extern fn ZigClangUnaryOperator_getOpcode(*const ZigClangUnaryOperator) ZigClangUO; | 1183 | pub extern fn ZigClangUnaryOperator_getOpcode(*const ZigClangUnaryOperator) ZigClangUO; |
| 1175 | pub extern fn ZigClangUnaryOperator_getType(*const ZigClangUnaryOperator) ZigClangQualType; | 1184 | pub extern fn ZigClangUnaryOperator_getType(*const ZigClangUnaryOperator) ZigClangQualType; |
src-self-hosted/translate_c.zig+19-2| ... | @@ -3068,13 +3068,30 @@ fn transUnaryExprOrTypeTraitExpr( | ... | @@ -3068,13 +3068,30 @@ fn transUnaryExprOrTypeTraitExpr( |
| 3068 | stmt: *const ZigClangUnaryExprOrTypeTraitExpr, | 3068 | stmt: *const ZigClangUnaryExprOrTypeTraitExpr, |
| 3069 | result_used: ResultUsed, | 3069 | result_used: ResultUsed, |
| 3070 | ) TransError!*ast.Node { | 3070 | ) TransError!*ast.Node { |
| 3071 | const loc = ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt); | ||
| 3071 | const type_node = try transQualType( | 3072 | const type_node = try transQualType( |
| 3072 | rp, | 3073 | rp, |
| 3073 | ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(stmt), | 3074 | ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(stmt), |
| 3074 | ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt), | 3075 | loc, |
| 3075 | ); | 3076 | ); |
| 3076 | 3077 | ||
| 3077 | const builtin_node = try rp.c.createBuiltinCall("@sizeOf", 1); | 3078 | const kind = ZigClangUnaryExprOrTypeTraitExpr_getKind(stmt); |
| 3079 | const kind_str = switch (kind) { | ||
| 3080 | .SizeOf => "@sizeOf", | ||
| 3081 | .AlignOf => "@alignOf", | ||
| 3082 | .PreferredAlignOf, | ||
| 3083 | .VecStep, | ||
| 3084 | .OpenMPRequiredSimdAlign, | ||
| 3085 | => return revertAndWarn( | ||
| 3086 | rp, | ||
| 3087 | error.UnsupportedTranslation, | ||
| 3088 | loc, | ||
| 3089 | "Unsupported type trait kind {}", | ||
| 3090 | .{kind}, | ||
| 3091 | ), | ||
| 3092 | }; | ||
| 3093 | |||
| 3094 | const builtin_node = try rp.c.createBuiltinCall(kind_str, 1); | ||
| 3078 | builtin_node.params()[0] = type_node; | 3095 | builtin_node.params()[0] = type_node; |
| 3079 | builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")"); | 3096 | builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")"); |
| 3080 | return maybeSuppressResult(rp, scope, result_used, &builtin_node.base); | 3097 | return maybeSuppressResult(rp, scope, result_used, &builtin_node.base); |
src/zig_clang.cpp+8| ... | @@ -2714,6 +2714,14 @@ struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc( | ... | @@ -2714,6 +2714,14 @@ struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc( |
| 2714 | return bitcast(casted->getBeginLoc()); | 2714 | return bitcast(casted->getBeginLoc()); |
| 2715 | } | 2715 | } |
| 2716 | 2716 | ||
| 2717 | |||
| 2718 | enum ZigClangUnaryExprOrTypeTrait_Kind ZigClangUnaryExprOrTypeTraitExpr_getKind( | ||
| 2719 | const struct ZigClangUnaryExprOrTypeTraitExpr *self) | ||
| 2720 | { | ||
| 2721 | auto casted = reinterpret_cast<const clang::UnaryExprOrTypeTraitExpr *>(self); | ||
| 2722 | return (ZigClangUnaryExprOrTypeTrait_Kind)casted->getKind(); | ||
| 2723 | } | ||
| 2724 | |||
| 2717 | const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *self) { | 2725 | const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *self) { |
| 2718 | auto casted = reinterpret_cast<const clang::DoStmt *>(self); | 2726 | auto casted = reinterpret_cast<const clang::DoStmt *>(self); |
| 2719 | return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody()); | 2727 | return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody()); |
src/zig_clang.h+9| ... | @@ -845,6 +845,14 @@ enum ZigClangExpr_ConstExprUsage { | ... | @@ -845,6 +845,14 @@ enum ZigClangExpr_ConstExprUsage { |
| 845 | ZigClangExpr_EvaluateForMangling, | 845 | ZigClangExpr_EvaluateForMangling, |
| 846 | }; | 846 | }; |
| 847 | 847 | ||
| 848 | enum ZigClangUnaryExprOrTypeTrait_Kind { | ||
| 849 | ZigClangUnaryExprOrTypeTrait_KindSizeOf, | ||
| 850 | ZigClangUnaryExprOrTypeTrait_KindAlignOf, | ||
| 851 | ZigClangUnaryExprOrTypeTrait_KindVecStep, | ||
| 852 | ZigClangUnaryExprOrTypeTrait_KindOpenMPRequiredSimdAlign, | ||
| 853 | ZigClangUnaryExprOrTypeTrait_KindPreferredAlignOf, | ||
| 854 | }; | ||
| 855 | |||
| 848 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *, | 856 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *, |
| 849 | struct ZigClangSourceLocation Loc); | 857 | struct ZigClangSourceLocation Loc); |
| 850 | ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *, | 858 | ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *, |
| ... | @@ -1134,6 +1142,7 @@ ZIG_EXTERN_C const struct ZigClangExpr *ZigClangArraySubscriptExpr_getIdx(const | ... | @@ -1134,6 +1142,7 @@ ZIG_EXTERN_C const struct ZigClangExpr *ZigClangArraySubscriptExpr_getIdx(const |
| 1134 | 1142 | ||
| 1135 | ZIG_EXTERN_C struct ZigClangQualType ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(const struct ZigClangUnaryExprOrTypeTraitExpr *); | 1143 | ZIG_EXTERN_C struct ZigClangQualType ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(const struct ZigClangUnaryExprOrTypeTraitExpr *); |
| 1136 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(const struct ZigClangUnaryExprOrTypeTraitExpr *); | 1144 | ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(const struct ZigClangUnaryExprOrTypeTraitExpr *); |
| 1145 | ZIG_EXTERN_C enum ZigClangUnaryExprOrTypeTrait_Kind ZigClangUnaryExprOrTypeTraitExpr_getKind(const struct ZigClangUnaryExprOrTypeTraitExpr *); | ||
| 1137 | 1146 | ||
| 1138 | ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *); | 1147 | ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *); |
| 1139 | ZIG_EXTERN_C const struct ZigClangExpr *ZigClangDoStmt_getCond(const struct ZigClangDoStmt *); | 1148 | ZIG_EXTERN_C const struct ZigClangExpr *ZigClangDoStmt_getCond(const struct ZigClangDoStmt *); |
test/translate_c.zig+10| ... | @@ -3,6 +3,16 @@ const std = @import("std"); | ... | @@ -3,6 +3,16 @@ const std = @import("std"); |
| 3 | const CrossTarget = std.zig.CrossTarget; | 3 | const CrossTarget = std.zig.CrossTarget; |
| 4 | 4 | ||
| 5 | pub fn addCases(cases: *tests.TranslateCContext) void { | 5 | pub fn addCases(cases: *tests.TranslateCContext) void { |
| 6 | cases.add("alignof", | ||
| 7 | \\int main() { | ||
| 8 | \\ int a = _Alignof(int); | ||
| 9 | \\} | ||
| 10 | , &[_][]const u8{ | ||
| 11 | \\pub export fn main() c_int { | ||
| 12 | \\ var a: c_int = @bitCast(c_int, @truncate(c_uint, @alignOf(c_int))); | ||
| 13 | \\} | ||
| 14 | }); | ||
| 15 | |||
| 6 | cases.add("initializer list macro", | 16 | cases.add("initializer list macro", |
| 7 | \\typedef struct Color { | 17 | \\typedef struct Color { |
| 8 | \\ unsigned char r; | 18 | \\ unsigned char r; |