authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-11 03:57:53-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-11 03:59:12-04:00
logdff201540f91bb41b44d7f73a11f4082f928cff7
treef5ec4c9f617cecb7a88e92f125a1382f8ef5827d
parent8f5753ba9f1fd43f14628e143d33d6e8a64847f0
signaturelock-open Commit is signed but in an unrecognized format.

translate-c: move some code to the C API

See #1964

3 files changed, 447 insertions(+), 391 deletions(-)

src/translate_c.cpp+387-391
......@@ -112,7 +112,7 @@ static TransScopeSwitch *trans_scope_switch_create(Context *c, TransScope *paren
112112
113113static TransScopeBlock *trans_scope_block_find(TransScope *scope);
114114
115static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_decl);
115static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record_decl);
116116static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl);
117117static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *typedef_decl);
118118
......@@ -122,9 +122,9 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *st
122122 TransScope **out_node_scope);
123123static TransScope *trans_stmt(Context *c, TransScope *scope, const clang::Stmt *stmt, AstNode **out_node);
124124static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr, TransLRValue lrval);
125static AstNode *trans_qual_type(Context *c, clang::QualType qt, const clang::SourceLocation &source_loc);
125static AstNode *trans_qual_type(Context *c, clang::QualType qt, ZigClangSourceLocation source_loc);
126126static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr, TransLRValue lrval);
127static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, const clang::SourceLocation &source_loc);
127static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, ZigClangSourceLocation source_loc);
128128
129129static ZigClangSourceLocation bitcast(clang::SourceLocation src) {
130130 ZigClangSourceLocation dest;
......@@ -143,7 +143,7 @@ static clang::QualType bitcast(ZigClangQualType src) {
143143}
144144
145145ATTRIBUTE_PRINTF(3, 4)
146static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, const char *format, ...) {
146static void emit_warning(Context *c, ZigClangSourceLocation sl, const char *format, ...) {
147147 if (!c->warnings_on) {
148148 return;
149149 }
......@@ -153,7 +153,6 @@ static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, cons
153153 Buf *msg = buf_vprintf(format, ap);
154154 va_end(ap);
155155
156 ZigClangSourceLocation sl = bitcast(clang_sl);
157156 const char *filename_bytes = ZigClangSourceManager_getFilename(c->source_manager,
158157 ZigClangSourceManager_getSpellingLoc(c->source_manager, sl));
159158 Buf *path;
......@@ -489,11 +488,6 @@ static Buf *string_ref_to_buf(llvm::StringRef string_ref) {
489488 return buf_create_from_mem((const char *)string_ref.bytes_begin(), string_ref.size());
490489}
491490
492static const char *decl_name(const clang::Decl *decl) {
493 const clang::NamedDecl *named_decl = static_cast<const clang::NamedDecl *>(decl);
494 return (const char *)named_decl->getName().bytes_begin();
495}
496
497491static AstNode *trans_create_node_apint(Context *c, const llvm::APSInt &aps_int) {
498492 AstNode *node = trans_create_node(c, NodeTypeIntLiteral);
499493 node->data.int_literal.bigint = allocate<BigInt>(1);
......@@ -539,7 +533,7 @@ static clang::QualType get_expr_qual_type_before_implicit_cast(Context *c, const
539533}
540534
541535static AstNode *get_expr_type(Context *c, const clang::Expr *expr) {
542 return trans_qual_type(c, get_expr_qual_type(c, expr), expr->getBeginLoc());
536 return trans_qual_type(c, get_expr_qual_type(c, expr), bitcast(expr->getBeginLoc()));
543537}
544538
545539static bool qual_types_equal(clang::QualType t1, clang::QualType t2) {
......@@ -598,7 +592,7 @@ static bool qual_type_is_fn_ptr(clang::QualType qt) {
598592 return false;
599593}
600594
601static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, const clang::SourceLocation &source_loc) {
595static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, ZigClangSourceLocation source_loc) {
602596 const clang::Type *ty = qt.getTypePtr();
603597 switch (ty->getTypeClass()) {
604598 case clang::Type::Builtin:
......@@ -622,7 +616,7 @@ static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, c
622616 {
623617 const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty);
624618 const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl();
625 const char *type_name = decl_name(typedef_decl);
619 const char *type_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl);
626620 if (strcmp(type_name, "uint8_t") == 0 || strcmp(type_name, "int8_t") == 0) {
627621 return 8;
628622 } else if (strcmp(type_name, "uint16_t") == 0 || strcmp(type_name, "int16_t") == 0) {
......@@ -643,7 +637,7 @@ static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, c
643637
644638
645639static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType &qt,
646 const clang::SourceLocation &source_loc)
640 ZigClangSourceLocation source_loc)
647641{
648642 uint32_t int_bit_width = qual_type_int_bit_width(c, qt, source_loc);
649643 if (int_bit_width != 0) {
......@@ -688,7 +682,7 @@ static bool qual_type_child_is_fn_proto(const clang::QualType &qt) {
688682 return false;
689683}
690684
691static AstNode* trans_c_cast(Context *c, const clang::SourceLocation &source_location, clang::QualType dest_type,
685static AstNode* trans_c_cast(Context *c, ZigClangSourceLocation source_location, clang::QualType dest_type,
692686 clang::QualType src_type, AstNode *expr)
693687{
694688 // The only way void pointer casts are valid C code, is if
......@@ -788,7 +782,7 @@ static bool qual_type_has_wrapping_overflow(Context *c, clang::QualType qt) {
788782 }
789783}
790784
791static bool type_is_opaque(Context *c, const clang::Type *ty, const clang::SourceLocation &source_loc) {
785static bool type_is_opaque(Context *c, const clang::Type *ty, ZigClangSourceLocation source_loc) {
792786 switch (ty->getTypeClass()) {
793787 case clang::Type::Builtin: {
794788 const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(ty);
......@@ -812,7 +806,7 @@ static bool type_is_opaque(Context *c, const clang::Type *ty, const clang::Sourc
812806 }
813807}
814808
815static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::SourceLocation &source_loc) {
809static AstNode *trans_type(Context *c, const clang::Type *ty, ZigClangSourceLocation source_loc) {
816810 switch (ty->getTypeClass()) {
817811 case clang::Type::Builtin:
818812 {
......@@ -1129,8 +1123,8 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
11291123 }
11301124 case clang::Type::Record:
11311125 {
1132 const clang::RecordType *record_ty = static_cast<const clang::RecordType*>(ty);
1133 return resolve_record_decl(c, record_ty->getDecl());
1126 const ZigClangRecordType *record_ty = reinterpret_cast<const ZigClangRecordType*>(ty);
1127 return resolve_record_decl(c, ZigClangRecordType_getDecl(record_ty));
11341128 }
11351129 case clang::Type::Enum:
11361130 {
......@@ -1217,7 +1211,7 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
12171211 zig_unreachable();
12181212}
12191213
1220static AstNode *trans_qual_type(Context *c, clang::QualType qt, const clang::SourceLocation &source_loc) {
1214static AstNode *trans_qual_type(Context *c, clang::QualType qt, ZigClangSourceLocation source_loc) {
12211215 return trans_type(c, qt.getTypePtr(), source_loc);
12221216}
12231217
......@@ -1289,7 +1283,7 @@ static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::Re
12891283static AstNode *trans_integer_literal(Context *c, ResultUsed result_used, const clang::IntegerLiteral *stmt) {
12901284 clang::Expr::EvalResult result;
12911285 if (!stmt->EvaluateAsInt(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
1292 emit_warning(c, stmt->getBeginLoc(), "invalid integer literal");
1286 emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid integer literal");
12931287 return nullptr;
12941288 }
12951289 AstNode *node = trans_create_node_apint(c, result.Val.getInt());
......@@ -1301,10 +1295,10 @@ static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const cl
13011295 if (!expr->EvaluateAsConstantExpr(result, clang::Expr::EvaluateForCodeGen,
13021296 *reinterpret_cast<clang::ASTContext *>(c->ctx)))
13031297 {
1304 emit_warning(c, expr->getBeginLoc(), "invalid constant expression");
1298 emit_warning(c, bitcast(expr->getBeginLoc()), "invalid constant expression");
13051299 return nullptr;
13061300 }
1307 AstNode *node = trans_ap_value(c, &result.Val, expr->getType(), expr->getBeginLoc());
1301 AstNode *node = trans_ap_value(c, &result.Val, expr->getType(), bitcast(expr->getBeginLoc()));
13081302 return maybe_suppress_result(c, result_used, node);
13091303}
13101304
......@@ -1417,7 +1411,7 @@ static AstNode *trans_create_assign(Context *c, ResultUsed result_used, TransSco
14171411static AstNode *trans_create_shift_op(Context *c, TransScope *scope, clang::QualType result_type,
14181412 clang::Expr *lhs_expr, BinOpType bin_op, clang::Expr *rhs_expr)
14191413{
1420 const clang::SourceLocation &rhs_location = rhs_expr->getBeginLoc();
1414 ZigClangSourceLocation rhs_location = bitcast(rhs_expr->getBeginLoc());
14211415 AstNode *rhs_type = qual_type_to_log2_int_ref(c, result_type, rhs_location);
14221416 // lhs >> u5(rh)
14231417
......@@ -1434,13 +1428,13 @@ static AstNode *trans_create_shift_op(Context *c, TransScope *scope, clang::Qual
14341428static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransScope *scope, const clang::BinaryOperator *stmt) {
14351429 switch (stmt->getOpcode()) {
14361430 case clang::BO_PtrMemD:
1437 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_PtrMemD");
1431 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemD");
14381432 return nullptr;
14391433 case clang::BO_PtrMemI:
1440 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_PtrMemI");
1434 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemI");
14411435 return nullptr;
14421436 case clang::BO_Cmp:
1443 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_Cmp");
1437 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_Cmp");
14441438 return nullptr;
14451439 case clang::BO_Mul: {
14461440 AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(),
......@@ -1584,7 +1578,7 @@ static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransS
15841578static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result_used, TransScope *scope,
15851579 const clang::CompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
15861580{
1587 const clang::SourceLocation &rhs_location = stmt->getRHS()->getBeginLoc();
1581 ZigClangSourceLocation rhs_location = bitcast(stmt->getRHS()->getBeginLoc());
15881582 AstNode *rhs_type = qual_type_to_log2_int_ref(c, stmt->getComputationLHSType(), rhs_location);
15891583
15901584 bool use_intermediate_casts = stmt->getComputationLHSType().getTypePtr() != stmt->getComputationResultType().getTypePtr();
......@@ -1733,13 +1727,13 @@ static AstNode *trans_compound_assign_operator(Context *c, ResultUsed result_use
17331727 else
17341728 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignTimes, BinOpTypeMult);
17351729 case clang::BO_DivAssign:
1736 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_DivAssign");
1730 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_DivAssign");
17371731 return nullptr;
17381732 case clang::BO_RemAssign:
1739 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_RemAssign");
1733 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_RemAssign");
17401734 return nullptr;
17411735 case clang::BO_Cmp:
1742 emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_Cmp");
1736 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_Cmp");
17431737 return nullptr;
17441738 case clang::BO_AddAssign:
17451739 if (qual_type_has_wrapping_overflow(c, stmt->getType()))
......@@ -1798,7 +1792,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
17981792 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
17991793 if (target_node == nullptr)
18001794 return nullptr;
1801 AstNode *node = trans_c_cast(c, stmt->getExprLoc(), stmt->getType(),
1795 AstNode *node = trans_c_cast(c, bitcast(stmt->getExprLoc()), stmt->getType(),
18021796 stmt->getSubExpr()->getType(), target_node);
18031797 return maybe_suppress_result(c, result_used, node);
18041798 }
......@@ -1832,160 +1826,160 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
18321826 case clang::CK_NoOp:
18331827 return trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
18341828 case clang::CK_Dependent:
1835 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_Dependent");
1829 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dependent");
18361830 return nullptr;
18371831 case clang::CK_LValueBitCast:
1838 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_LValueBitCast");
1832 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_LValueBitCast");
18391833 return nullptr;
18401834 case clang::CK_BaseToDerived:
1841 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_BaseToDerived");
1835 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerived");
18421836 return nullptr;
18431837 case clang::CK_DerivedToBase:
1844 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_DerivedToBase");
1838 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBase");
18451839 return nullptr;
18461840 case clang::CK_UncheckedDerivedToBase:
1847 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_UncheckedDerivedToBase");
1841 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UncheckedDerivedToBase");
18481842 return nullptr;
18491843 case clang::CK_Dynamic:
1850 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_Dynamic");
1844 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dynamic");
18511845 return nullptr;
18521846 case clang::CK_ToUnion:
1853 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_ToUnion");
1847 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ToUnion");
18541848 return nullptr;
18551849 case clang::CK_NullToMemberPointer:
1856 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_NullToMemberPointer");
1850 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_NullToMemberPointer");
18571851 return nullptr;
18581852 case clang::CK_BaseToDerivedMemberPointer:
1859 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
1853 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
18601854 return nullptr;
18611855 case clang::CK_DerivedToBaseMemberPointer:
1862 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
1856 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
18631857 return nullptr;
18641858 case clang::CK_MemberPointerToBoolean:
1865 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_MemberPointerToBoolean");
1859 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_MemberPointerToBoolean");
18661860 return nullptr;
18671861 case clang::CK_ReinterpretMemberPointer:
1868 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_ReinterpretMemberPointer");
1862 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ReinterpretMemberPointer");
18691863 return nullptr;
18701864 case clang::CK_UserDefinedConversion:
1871 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_UserDefinedConversion");
1865 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UserDefinedConversion");
18721866 return nullptr;
18731867 case clang::CK_ConstructorConversion:
1874 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ConstructorConversion");
1868 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion");
18751869 return nullptr;
18761870 case clang::CK_IntegralToPointer:
1877 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToPointer");
1871 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToPointer");
18781872 return nullptr;
18791873 case clang::CK_PointerToIntegral:
1880 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_PointerToIntegral");
1874 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_PointerToIntegral");
18811875 return nullptr;
18821876 case clang::CK_PointerToBoolean:
1883 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_PointerToBoolean");
1877 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_PointerToBoolean");
18841878 return nullptr;
18851879 case clang::CK_ToVoid:
1886 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ToVoid");
1880 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid");
18871881 return nullptr;
18881882 case clang::CK_VectorSplat:
1889 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_VectorSplat");
1883 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_VectorSplat");
18901884 return nullptr;
18911885 case clang::CK_IntegralToBoolean:
1892 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToBoolean");
1886 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToBoolean");
18931887 return nullptr;
18941888 case clang::CK_IntegralToFloating:
1895 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToFloating");
1889 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToFloating");
18961890 return nullptr;
18971891 case clang::CK_FixedPointCast:
1898 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FixedPointCast");
1892 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointCast");
18991893 return nullptr;
19001894 case clang::CK_FixedPointToBoolean:
1901 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FixedPointToBoolean");
1895 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointToBoolean");
19021896 return nullptr;
19031897 case clang::CK_FloatingToIntegral:
1904 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingToIntegral");
1898 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToIntegral");
19051899 return nullptr;
19061900 case clang::CK_FloatingToBoolean:
1907 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingToBoolean");
1901 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToBoolean");
19081902 return nullptr;
19091903 case clang::CK_BooleanToSignedIntegral:
1910 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BooleanToSignedIntegral");
1904 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BooleanToSignedIntegral");
19111905 return nullptr;
19121906 case clang::CK_FloatingCast:
1913 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingCast");
1907 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingCast");
19141908 return nullptr;
19151909 case clang::CK_CPointerToObjCPointerCast:
1916 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_CPointerToObjCPointerCast");
1910 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CPointerToObjCPointerCast");
19171911 return nullptr;
19181912 case clang::CK_BlockPointerToObjCPointerCast:
1919 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BlockPointerToObjCPointerCast");
1913 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BlockPointerToObjCPointerCast");
19201914 return nullptr;
19211915 case clang::CK_AnyPointerToBlockPointerCast:
1922 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AnyPointerToBlockPointerCast");
1916 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AnyPointerToBlockPointerCast");
19231917 return nullptr;
19241918 case clang::CK_ObjCObjectLValueCast:
1925 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ObjCObjectLValueCast");
1919 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ObjCObjectLValueCast");
19261920 return nullptr;
19271921 case clang::CK_FloatingRealToComplex:
1928 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingRealToComplex");
1922 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingRealToComplex");
19291923 return nullptr;
19301924 case clang::CK_FloatingComplexToReal:
1931 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToReal");
1925 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToReal");
19321926 return nullptr;
19331927 case clang::CK_FloatingComplexToBoolean:
1934 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToBoolean");
1928 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToBoolean");
19351929 return nullptr;
19361930 case clang::CK_FloatingComplexCast:
1937 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexCast");
1931 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexCast");
19381932 return nullptr;
19391933 case clang::CK_FloatingComplexToIntegralComplex:
1940 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToIntegralComplex");
1934 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToIntegralComplex");
19411935 return nullptr;
19421936 case clang::CK_IntegralRealToComplex:
1943 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralRealToComplex");
1937 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralRealToComplex");
19441938 return nullptr;
19451939 case clang::CK_IntegralComplexToReal:
1946 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToReal");
1940 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToReal");
19471941 return nullptr;
19481942 case clang::CK_IntegralComplexToBoolean:
1949 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToBoolean");
1943 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToBoolean");
19501944 return nullptr;
19511945 case clang::CK_IntegralComplexCast:
1952 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexCast");
1946 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexCast");
19531947 return nullptr;
19541948 case clang::CK_IntegralComplexToFloatingComplex:
1955 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToFloatingComplex");
1949 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToFloatingComplex");
19561950 return nullptr;
19571951 case clang::CK_ARCProduceObject:
1958 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCProduceObject");
1952 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCProduceObject");
19591953 return nullptr;
19601954 case clang::CK_ARCConsumeObject:
1961 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCConsumeObject");
1955 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCConsumeObject");
19621956 return nullptr;
19631957 case clang::CK_ARCReclaimReturnedObject:
1964 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCReclaimReturnedObject");
1958 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCReclaimReturnedObject");
19651959 return nullptr;
19661960 case clang::CK_ARCExtendBlockObject:
1967 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCExtendBlockObject");
1961 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCExtendBlockObject");
19681962 return nullptr;
19691963 case clang::CK_AtomicToNonAtomic:
1970 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AtomicToNonAtomic");
1964 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AtomicToNonAtomic");
19711965 return nullptr;
19721966 case clang::CK_NonAtomicToAtomic:
1973 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_NonAtomicToAtomic");
1967 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_NonAtomicToAtomic");
19741968 return nullptr;
19751969 case clang::CK_CopyAndAutoreleaseBlockObject:
1976 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
1970 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
19771971 return nullptr;
19781972 case clang::CK_BuiltinFnToFnPtr:
1979 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BuiltinFnToFnPtr");
1973 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BuiltinFnToFnPtr");
19801974 return nullptr;
19811975 case clang::CK_ZeroToOCLOpaqueType:
1982 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ZeroToOCLOpaqueType");
1976 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ZeroToOCLOpaqueType");
19831977 return nullptr;
19841978 case clang::CK_AddressSpaceConversion:
1985 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AddressSpaceConversion");
1979 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AddressSpaceConversion");
19861980 return nullptr;
19871981 case clang::CK_IntToOCLSampler:
1988 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntToOCLSampler");
1982 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntToOCLSampler");
19891983 return nullptr;
19901984 }
19911985 zig_unreachable();
......@@ -1993,7 +1987,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
19931987
19941988static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const clang::DeclRefExpr *stmt, TransLRValue lrval) {
19951989 const clang::ValueDecl *value_decl = stmt->getDecl();
1996 Buf *c_symbol_name = buf_create_from_str(decl_name(value_decl));
1990 Buf *c_symbol_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)value_decl));
19971991 Buf *zig_symbol_name = trans_lookup_zig_symbol(c, scope, c_symbol_name);
19981992 if (lrval == TransLValue) {
19991993 c->ptr_params.put(zig_symbol_name, true);
......@@ -2148,7 +2142,7 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
21482142 return trans_create_node_ptr_deref(c, unwrapped);
21492143 }
21502144 case clang::UO_Plus:
2151 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Plus");
2145 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Plus");
21522146 return nullptr;
21532147 case clang::UO_Minus:
21542148 {
......@@ -2174,7 +2168,7 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
21742168 node->data.bin_op_expr.bin_op = BinOpTypeSubWrap;
21752169 return node;
21762170 } else {
2177 emit_warning(c, stmt->getBeginLoc(), "C negation with non float non integer");
2171 emit_warning(c, bitcast(stmt->getBeginLoc()), "C negation with non float non integer");
21782172 return nullptr;
21792173 }
21802174 }
......@@ -2197,15 +2191,15 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
21972191 return trans_create_node_prefix_op(c, PrefixOpBoolNot, sub_node);
21982192 }
21992193 case clang::UO_Real:
2200 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Real");
2194 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Real");
22012195 return nullptr;
22022196 case clang::UO_Imag:
2203 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Imag");
2197 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Imag");
22042198 return nullptr;
22052199 case clang::UO_Extension:
22062200 return trans_expr(c, result_used, scope, stmt->getSubExpr(), TransLValue);
22072201 case clang::UO_Coawait:
2208 emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Coawait");
2202 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Coawait");
22092203 return nullptr;
22102204 }
22112205 zig_unreachable();
......@@ -2235,11 +2229,11 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
22352229 } else {
22362230 init_node = trans_create_node(c, NodeTypeUndefinedLiteral);
22372231 }
2238 AstNode *type_node = trans_qual_type(c, qual_type, stmt->getBeginLoc());
2232 AstNode *type_node = trans_qual_type(c, qual_type, bitcast(stmt->getBeginLoc()));
22392233 if (type_node == nullptr)
22402234 return ErrorUnexpected;
22412235
2242 Buf *c_symbol_name = buf_create_from_str(decl_name(var_decl));
2236 Buf *c_symbol_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)var_decl));
22432237
22442238 TransScopeVar *var_scope = trans_scope_var_create(c, scope, c_symbol_name);
22452239 scope = &var_scope->base;
......@@ -2251,223 +2245,223 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
22512245 continue;
22522246 }
22532247 case clang::Decl::AccessSpec:
2254 emit_warning(c, stmt->getBeginLoc(), "TODO handle decl kind AccessSpec");
2248 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle decl kind AccessSpec");
22552249 return ErrorUnexpected;
22562250 case clang::Decl::Block:
2257 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Block");
2251 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Block");
22582252 return ErrorUnexpected;
22592253 case clang::Decl::Captured:
2260 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Captured");
2254 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Captured");
22612255 return ErrorUnexpected;
22622256 case clang::Decl::ClassScopeFunctionSpecialization:
2263 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassScopeFunctionSpecialization");
2257 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassScopeFunctionSpecialization");
22642258 return ErrorUnexpected;
22652259 case clang::Decl::Empty:
2266 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Empty");
2260 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Empty");
22672261 return ErrorUnexpected;
22682262 case clang::Decl::Export:
2269 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Export");
2263 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Export");
22702264 return ErrorUnexpected;
22712265 case clang::Decl::ExternCContext:
2272 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExternCContext");
2266 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExternCContext");
22732267 return ErrorUnexpected;
22742268 case clang::Decl::FileScopeAsm:
2275 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FileScopeAsm");
2269 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FileScopeAsm");
22762270 return ErrorUnexpected;
22772271 case clang::Decl::Friend:
2278 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Friend");
2272 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Friend");
22792273 return ErrorUnexpected;
22802274 case clang::Decl::FriendTemplate:
2281 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FriendTemplate");
2275 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FriendTemplate");
22822276 return ErrorUnexpected;
22832277 case clang::Decl::Import:
2284 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Import");
2278 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Import");
22852279 return ErrorUnexpected;
22862280 case clang::Decl::LinkageSpec:
2287 emit_warning(c, stmt->getBeginLoc(), "TODO handle C LinkageSpec");
2281 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C LinkageSpec");
22882282 return ErrorUnexpected;
22892283 case clang::Decl::Label:
2290 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Label");
2284 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Label");
22912285 return ErrorUnexpected;
22922286 case clang::Decl::Namespace:
2293 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Namespace");
2287 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Namespace");
22942288 return ErrorUnexpected;
22952289 case clang::Decl::NamespaceAlias:
2296 emit_warning(c, stmt->getBeginLoc(), "TODO handle C NamespaceAlias");
2290 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NamespaceAlias");
22972291 return ErrorUnexpected;
22982292 case clang::Decl::ObjCCompatibleAlias:
2299 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCompatibleAlias");
2293 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCompatibleAlias");
23002294 return ErrorUnexpected;
23012295 case clang::Decl::ObjCCategory:
2302 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCategory");
2296 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategory");
23032297 return ErrorUnexpected;
23042298 case clang::Decl::ObjCCategoryImpl:
2305 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCategoryImpl");
2299 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategoryImpl");
23062300 return ErrorUnexpected;
23072301 case clang::Decl::ObjCImplementation:
2308 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCImplementation");
2302 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCImplementation");
23092303 return ErrorUnexpected;
23102304 case clang::Decl::ObjCInterface:
2311 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCInterface");
2305 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCInterface");
23122306 return ErrorUnexpected;
23132307 case clang::Decl::ObjCProtocol:
2314 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProtocol");
2308 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProtocol");
23152309 return ErrorUnexpected;
23162310 case clang::Decl::ObjCMethod:
2317 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCMethod");
2311 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCMethod");
23182312 return ErrorUnexpected;
23192313 case clang::Decl::ObjCProperty:
2320 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProperty");
2314 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProperty");
23212315 return ErrorUnexpected;
23222316 case clang::Decl::BuiltinTemplate:
2323 emit_warning(c, stmt->getBeginLoc(), "TODO handle C BuiltinTemplate");
2317 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C BuiltinTemplate");
23242318 return ErrorUnexpected;
23252319 case clang::Decl::ClassTemplate:
2326 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplate");
2320 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplate");
23272321 return ErrorUnexpected;
23282322 case clang::Decl::FunctionTemplate:
2329 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FunctionTemplate");
2323 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FunctionTemplate");
23302324 return ErrorUnexpected;
23312325 case clang::Decl::TypeAliasTemplate:
2332 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeAliasTemplate");
2326 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAliasTemplate");
23332327 return ErrorUnexpected;
23342328 case clang::Decl::VarTemplate:
2335 emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplate");
2329 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplate");
23362330 return ErrorUnexpected;
23372331 case clang::Decl::TemplateTemplateParm:
2338 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TemplateTemplateParm");
2332 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTemplateParm");
23392333 return ErrorUnexpected;
23402334 case clang::Decl::Enum:
2341 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Enum");
2335 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Enum");
23422336 return ErrorUnexpected;
23432337 case clang::Decl::Record:
2344 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Record");
2338 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Record");
23452339 return ErrorUnexpected;
23462340 case clang::Decl::CXXRecord:
2347 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXRecord");
2341 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXRecord");
23482342 return ErrorUnexpected;
23492343 case clang::Decl::ClassTemplateSpecialization:
2350 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplateSpecialization");
2344 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplateSpecialization");
23512345 return ErrorUnexpected;
23522346 case clang::Decl::ClassTemplatePartialSpecialization:
2353 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplatePartialSpecialization");
2347 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplatePartialSpecialization");
23542348 return ErrorUnexpected;
23552349 case clang::Decl::TemplateTypeParm:
2356 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TemplateTypeParm");
2350 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTypeParm");
23572351 return ErrorUnexpected;
23582352 case clang::Decl::ObjCTypeParam:
2359 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCTypeParam");
2353 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCTypeParam");
23602354 return ErrorUnexpected;
23612355 case clang::Decl::TypeAlias:
2362 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeAlias");
2356 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAlias");
23632357 return ErrorUnexpected;
23642358 case clang::Decl::Typedef:
2365 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Typedef");
2359 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Typedef");
23662360 return ErrorUnexpected;
23672361 case clang::Decl::UnresolvedUsingTypename:
2368 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedUsingTypename");
2362 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingTypename");
23692363 return ErrorUnexpected;
23702364 case clang::Decl::Using:
2371 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Using");
2365 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Using");
23722366 return ErrorUnexpected;
23732367 case clang::Decl::UsingDirective:
2374 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingDirective");
2368 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingDirective");
23752369 return ErrorUnexpected;
23762370 case clang::Decl::UsingPack:
2377 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingPack");
2371 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingPack");
23782372 return ErrorUnexpected;
23792373 case clang::Decl::UsingShadow:
2380 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingShadow");
2374 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingShadow");
23812375 return ErrorUnexpected;
23822376 case clang::Decl::ConstructorUsingShadow:
2383 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ConstructorUsingShadow");
2377 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ConstructorUsingShadow");
23842378 return ErrorUnexpected;
23852379 case clang::Decl::Binding:
2386 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Binding");
2380 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Binding");
23872381 return ErrorUnexpected;
23882382 case clang::Decl::Field:
2389 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Field");
2383 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Field");
23902384 return ErrorUnexpected;
23912385 case clang::Decl::ObjCAtDefsField:
2392 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtDefsField");
2386 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtDefsField");
23932387 return ErrorUnexpected;
23942388 case clang::Decl::ObjCIvar:
2395 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIvar");
2389 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIvar");
23962390 return ErrorUnexpected;
23972391 case clang::Decl::Function:
2398 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Function");
2392 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Function");
23992393 return ErrorUnexpected;
24002394 case clang::Decl::CXXDeductionGuide:
2401 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDeductionGuide");
2395 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDeductionGuide");
24022396 return ErrorUnexpected;
24032397 case clang::Decl::CXXMethod:
2404 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXMethod");
2398 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXMethod");
24052399 return ErrorUnexpected;
24062400 case clang::Decl::CXXConstructor:
2407 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstructor");
2401 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConstructor");
24082402 return ErrorUnexpected;
24092403 case clang::Decl::CXXConversion:
2410 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConversion");
2404 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConversion");
24112405 return ErrorUnexpected;
24122406 case clang::Decl::CXXDestructor:
2413 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDestructor");
2407 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDestructor");
24142408 return ErrorUnexpected;
24152409 case clang::Decl::MSProperty:
2416 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSProperty");
2410 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSProperty");
24172411 return ErrorUnexpected;
24182412 case clang::Decl::NonTypeTemplateParm:
2419 emit_warning(c, stmt->getBeginLoc(), "TODO handle C NonTypeTemplateParm");
2413 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NonTypeTemplateParm");
24202414 return ErrorUnexpected;
24212415 case clang::Decl::Decomposition:
2422 emit_warning(c, stmt->getBeginLoc(), "TODO handle C Decomposition");
2416 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Decomposition");
24232417 return ErrorUnexpected;
24242418 case clang::Decl::ImplicitParam:
2425 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImplicitParam");
2419 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ImplicitParam");
24262420 return ErrorUnexpected;
24272421 case clang::Decl::OMPCapturedExpr:
2428 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCapturedExpr");
2422 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCapturedExpr");
24292423 return ErrorUnexpected;
24302424 case clang::Decl::ParmVar:
2431 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ParmVar");
2425 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ParmVar");
24322426 return ErrorUnexpected;
24332427 case clang::Decl::VarTemplateSpecialization:
2434 emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplateSpecialization");
2428 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplateSpecialization");
24352429 return ErrorUnexpected;
24362430 case clang::Decl::VarTemplatePartialSpecialization:
2437 emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplatePartialSpecialization");
2431 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplatePartialSpecialization");
24382432 return ErrorUnexpected;
24392433 case clang::Decl::EnumConstant:
2440 emit_warning(c, stmt->getBeginLoc(), "TODO handle C EnumConstant");
2434 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C EnumConstant");
24412435 return ErrorUnexpected;
24422436 case clang::Decl::IndirectField:
2443 emit_warning(c, stmt->getBeginLoc(), "TODO handle C IndirectField");
2437 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C IndirectField");
24442438 return ErrorUnexpected;
24452439 case clang::Decl::OMPDeclareReduction:
2446 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDeclareReduction");
2440 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDeclareReduction");
24472441 return ErrorUnexpected;
24482442 case clang::Decl::UnresolvedUsingValue:
2449 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedUsingValue");
2443 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingValue");
24502444 return ErrorUnexpected;
24512445 case clang::Decl::OMPRequires:
2452 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPRequires");
2446 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPRequires");
24532447 return ErrorUnexpected;
24542448 case clang::Decl::OMPThreadPrivate:
2455 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPThreadPrivate");
2449 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPThreadPrivate");
24562450 return ErrorUnexpected;
24572451 case clang::Decl::ObjCPropertyImpl:
2458 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCPropertyImpl");
2452 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCPropertyImpl");
24592453 return ErrorUnexpected;
24602454 case clang::Decl::PragmaComment:
2461 emit_warning(c, stmt->getBeginLoc(), "TODO handle C PragmaComment");
2455 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaComment");
24622456 return ErrorUnexpected;
24632457 case clang::Decl::PragmaDetectMismatch:
2464 emit_warning(c, stmt->getBeginLoc(), "TODO handle C PragmaDetectMismatch");
2458 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaDetectMismatch");
24652459 return ErrorUnexpected;
24662460 case clang::Decl::StaticAssert:
2467 emit_warning(c, stmt->getBeginLoc(), "TODO handle C StaticAssert");
2461 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C StaticAssert");
24682462 return ErrorUnexpected;
24692463 case clang::Decl::TranslationUnit:
2470 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TranslationUnit");
2464 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TranslationUnit");
24712465 return ErrorUnexpected;
24722466 }
24732467 zig_unreachable();
......@@ -2689,7 +2683,7 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
26892683 const clang::ElaboratedType *elaborated_ty = static_cast<const clang::ElaboratedType*>(ty);
26902684 switch (elaborated_ty->getKeyword()) {
26912685 case clang::ETK_Enum: {
2692 AstNode *enum_type = trans_qual_type(c, elaborated_ty->getNamedType(), expr->getBeginLoc());
2686 AstNode *enum_type = trans_qual_type(c, elaborated_ty->getNamedType(), bitcast(expr->getBeginLoc()));
26932687 return to_enum_zero_cmp(c, res, enum_type);
26942688 }
26952689 case clang::ETK_Struct:
......@@ -2846,7 +2840,7 @@ static AstNode *trans_member_expr(Context *c, ResultUsed result_used, TransScope
28462840 container_node = trans_create_node_unwrap_null(c, container_node);
28472841 }
28482842
2849 const char *name = decl_name(stmt->getMemberDecl());
2843 const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)stmt->getMemberDecl());
28502844
28512845 AstNode *node = trans_create_node_field_access_str(c, container_node, name);
28522846 return maybe_suppress_result(c, result_used, node);
......@@ -2875,7 +2869,7 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
28752869 if (sub_expr_node == nullptr)
28762870 return nullptr;
28772871
2878 AstNode *cast = trans_c_cast(c, stmt->getBeginLoc(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
2872 AstNode *cast = trans_c_cast(c, bitcast(stmt->getBeginLoc()), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
28792873 if (cast == nullptr)
28802874 return nullptr;
28812875
......@@ -2885,7 +2879,7 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
28852879static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, ResultUsed result_used,
28862880 TransScope *scope, const clang::UnaryExprOrTypeTraitExpr *stmt)
28872881{
2888 AstNode *type_node = trans_qual_type(c, stmt->getTypeOfArgument(), stmt->getBeginLoc());
2882 AstNode *type_node = trans_qual_type(c, stmt->getTypeOfArgument(), bitcast(stmt->getBeginLoc()));
28892883 if (type_node == nullptr)
28902884 return nullptr;
28912885
......@@ -3092,7 +3086,7 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
30923086 *out_node = nullptr;
30933087
30943088 if (stmt->getRHS() != nullptr) {
3095 emit_warning(c, stmt->getBeginLoc(), "TODO support GNU switch case a ... b extension");
3089 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support GNU switch case a ... b extension");
30963090 return ErrorUnexpected;
30973091 }
30983092
......@@ -3177,13 +3171,13 @@ static AstNode *trans_string_literal(Context *c, ResultUsed result_used, TransSc
31773171 return maybe_suppress_result(c, result_used, node);
31783172 }
31793173 case clang::StringLiteral::UTF16:
3180 emit_warning(c, stmt->getBeginLoc(), "TODO support UTF16 string literals");
3174 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF16 string literals");
31813175 return nullptr;
31823176 case clang::StringLiteral::UTF32:
3183 emit_warning(c, stmt->getBeginLoc(), "TODO support UTF32 string literals");
3177 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF32 string literals");
31843178 return nullptr;
31853179 case clang::StringLiteral::Wide:
3186 emit_warning(c, stmt->getBeginLoc(), "TODO support wide string literals");
3180 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support wide string literals");
31873181 return nullptr;
31883182 }
31893183 zig_unreachable();
......@@ -3328,505 +3322,505 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *st
33283322 return wrap_stmt(out_node, out_child_scope, scope,
33293323 trans_stmt_expr(c, result_used, scope, (const clang::StmtExpr *)stmt, out_node_scope));
33303324 case clang::Stmt::NoStmtClass:
3331 emit_warning(c, stmt->getBeginLoc(), "TODO handle C NoStmtClass");
3325 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NoStmtClass");
33323326 return ErrorUnexpected;
33333327 case clang::Stmt::GCCAsmStmtClass:
3334 emit_warning(c, stmt->getBeginLoc(), "TODO handle C GCCAsmStmtClass");
3328 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C GCCAsmStmtClass");
33353329 return ErrorUnexpected;
33363330 case clang::Stmt::MSAsmStmtClass:
3337 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSAsmStmtClass");
3331 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSAsmStmtClass");
33383332 return ErrorUnexpected;
33393333 case clang::Stmt::AttributedStmtClass:
3340 emit_warning(c, stmt->getBeginLoc(), "TODO handle C AttributedStmtClass");
3334 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C AttributedStmtClass");
33413335 return ErrorUnexpected;
33423336 case clang::Stmt::CXXCatchStmtClass:
3343 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXCatchStmtClass");
3337 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXCatchStmtClass");
33443338 return ErrorUnexpected;
33453339 case clang::Stmt::CXXForRangeStmtClass:
3346 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXForRangeStmtClass");
3340 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXForRangeStmtClass");
33473341 return ErrorUnexpected;
33483342 case clang::Stmt::CXXTryStmtClass:
3349 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTryStmtClass");
3343 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXTryStmtClass");
33503344 return ErrorUnexpected;
33513345 case clang::Stmt::CapturedStmtClass:
3352 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CapturedStmtClass");
3346 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CapturedStmtClass");
33533347 return ErrorUnexpected;
33543348 case clang::Stmt::CoreturnStmtClass:
3355 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoreturnStmtClass");
3349 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CoreturnStmtClass");
33563350 return ErrorUnexpected;
33573351 case clang::Stmt::CoroutineBodyStmtClass:
3358 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoroutineBodyStmtClass");
3352 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CoroutineBodyStmtClass");
33593353 return ErrorUnexpected;
33603354 case clang::Stmt::BinaryConditionalOperatorClass:
3361 emit_warning(c, stmt->getBeginLoc(), "TODO handle C BinaryConditionalOperatorClass");
3355 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C BinaryConditionalOperatorClass");
33623356 return ErrorUnexpected;
33633357 case clang::Stmt::AddrLabelExprClass:
3364 emit_warning(c, stmt->getBeginLoc(), "TODO handle C AddrLabelExprClass");
3358 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C AddrLabelExprClass");
33653359 return ErrorUnexpected;
33663360 case clang::Stmt::ArrayInitIndexExprClass:
3367 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayInitIndexExprClass");
3361 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ArrayInitIndexExprClass");
33683362 return ErrorUnexpected;
33693363 case clang::Stmt::ArrayInitLoopExprClass:
3370 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayInitLoopExprClass");
3364 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ArrayInitLoopExprClass");
33713365 return ErrorUnexpected;
33723366 case clang::Stmt::ArrayTypeTraitExprClass:
3373 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayTypeTraitExprClass");
3367 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ArrayTypeTraitExprClass");
33743368 return ErrorUnexpected;
33753369 case clang::Stmt::AsTypeExprClass:
3376 emit_warning(c, stmt->getBeginLoc(), "TODO handle C AsTypeExprClass");
3370 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C AsTypeExprClass");
33773371 return ErrorUnexpected;
33783372 case clang::Stmt::AtomicExprClass:
3379 emit_warning(c, stmt->getBeginLoc(), "TODO handle C AtomicExprClass");
3373 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C AtomicExprClass");
33803374 return ErrorUnexpected;
33813375 case clang::Stmt::BlockExprClass:
3382 emit_warning(c, stmt->getBeginLoc(), "TODO handle C BlockExprClass");
3376 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C BlockExprClass");
33833377 return ErrorUnexpected;
33843378 case clang::Stmt::CXXBindTemporaryExprClass:
3385 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXBindTemporaryExprClass");
3379 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXBindTemporaryExprClass");
33863380 return ErrorUnexpected;
33873381 case clang::Stmt::CXXBoolLiteralExprClass:
3388 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXBoolLiteralExprClass");
3382 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXBoolLiteralExprClass");
33893383 return ErrorUnexpected;
33903384 case clang::Stmt::CXXConstructExprClass:
3391 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstructExprClass");
3385 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConstructExprClass");
33923386 return ErrorUnexpected;
33933387 case clang::Stmt::CXXTemporaryObjectExprClass:
3394 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTemporaryObjectExprClass");
3388 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXTemporaryObjectExprClass");
33953389 return ErrorUnexpected;
33963390 case clang::Stmt::CXXDefaultArgExprClass:
3397 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDefaultArgExprClass");
3391 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDefaultArgExprClass");
33983392 return ErrorUnexpected;
33993393 case clang::Stmt::CXXDefaultInitExprClass:
3400 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDefaultInitExprClass");
3394 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDefaultInitExprClass");
34013395 return ErrorUnexpected;
34023396 case clang::Stmt::CXXDeleteExprClass:
3403 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDeleteExprClass");
3397 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDeleteExprClass");
34043398 return ErrorUnexpected;
34053399 case clang::Stmt::CXXDependentScopeMemberExprClass:
3406 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDependentScopeMemberExprClass");
3400 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDependentScopeMemberExprClass");
34073401 return ErrorUnexpected;
34083402 case clang::Stmt::CXXFoldExprClass:
3409 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXFoldExprClass");
3403 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXFoldExprClass");
34103404 return ErrorUnexpected;
34113405 case clang::Stmt::CXXInheritedCtorInitExprClass:
3412 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXInheritedCtorInitExprClass");
3406 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXInheritedCtorInitExprClass");
34133407 return ErrorUnexpected;
34143408 case clang::Stmt::CXXNewExprClass:
3415 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNewExprClass");
3409 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXNewExprClass");
34163410 return ErrorUnexpected;
34173411 case clang::Stmt::CXXNoexceptExprClass:
3418 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNoexceptExprClass");
3412 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXNoexceptExprClass");
34193413 return ErrorUnexpected;
34203414 case clang::Stmt::CXXNullPtrLiteralExprClass:
3421 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNullPtrLiteralExprClass");
3415 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXNullPtrLiteralExprClass");
34223416 return ErrorUnexpected;
34233417 case clang::Stmt::CXXPseudoDestructorExprClass:
3424 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXPseudoDestructorExprClass");
3418 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXPseudoDestructorExprClass");
34253419 return ErrorUnexpected;
34263420 case clang::Stmt::CXXScalarValueInitExprClass:
3427 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXScalarValueInitExprClass");
3421 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXScalarValueInitExprClass");
34283422 return ErrorUnexpected;
34293423 case clang::Stmt::CXXStdInitializerListExprClass:
3430 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXStdInitializerListExprClass");
3424 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXStdInitializerListExprClass");
34313425 return ErrorUnexpected;
34323426 case clang::Stmt::CXXThisExprClass:
3433 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXThisExprClass");
3427 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXThisExprClass");
34343428 return ErrorUnexpected;
34353429 case clang::Stmt::CXXThrowExprClass:
3436 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXThrowExprClass");
3430 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXThrowExprClass");
34373431 return ErrorUnexpected;
34383432 case clang::Stmt::CXXTypeidExprClass:
3439 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTypeidExprClass");
3433 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXTypeidExprClass");
34403434 return ErrorUnexpected;
34413435 case clang::Stmt::CXXUnresolvedConstructExprClass:
3442 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXUnresolvedConstructExprClass");
3436 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXUnresolvedConstructExprClass");
34433437 return ErrorUnexpected;
34443438 case clang::Stmt::CXXUuidofExprClass:
3445 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXUuidofExprClass");
3439 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXUuidofExprClass");
34463440 return ErrorUnexpected;
34473441 case clang::Stmt::CUDAKernelCallExprClass:
3448 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CUDAKernelCallExprClass");
3442 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CUDAKernelCallExprClass");
34493443 return ErrorUnexpected;
34503444 case clang::Stmt::CXXMemberCallExprClass:
3451 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXMemberCallExprClass");
3445 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXMemberCallExprClass");
34523446 return ErrorUnexpected;
34533447 case clang::Stmt::CXXOperatorCallExprClass:
3454 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXOperatorCallExprClass");
3448 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXOperatorCallExprClass");
34553449 return ErrorUnexpected;
34563450 case clang::Stmt::UserDefinedLiteralClass:
3457 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UserDefinedLiteralClass");
3451 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UserDefinedLiteralClass");
34583452 return ErrorUnexpected;
34593453 case clang::Stmt::CXXFunctionalCastExprClass:
3460 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXFunctionalCastExprClass");
3454 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXFunctionalCastExprClass");
34613455 return ErrorUnexpected;
34623456 case clang::Stmt::CXXConstCastExprClass:
3463 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstCastExprClass");
3457 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConstCastExprClass");
34643458 return ErrorUnexpected;
34653459 case clang::Stmt::CXXDynamicCastExprClass:
3466 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDynamicCastExprClass");
3460 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDynamicCastExprClass");
34673461 return ErrorUnexpected;
34683462 case clang::Stmt::CXXReinterpretCastExprClass:
3469 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXReinterpretCastExprClass");
3463 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXReinterpretCastExprClass");
34703464 return ErrorUnexpected;
34713465 case clang::Stmt::CXXStaticCastExprClass:
3472 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXStaticCastExprClass");
3466 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXStaticCastExprClass");
34733467 return ErrorUnexpected;
34743468 case clang::Stmt::ObjCBridgedCastExprClass:
3475 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBridgedCastExprClass");
3469 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCBridgedCastExprClass");
34763470 return ErrorUnexpected;
34773471 case clang::Stmt::CharacterLiteralClass:
3478 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CharacterLiteralClass");
3472 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CharacterLiteralClass");
34793473 return ErrorUnexpected;
34803474 case clang::Stmt::ChooseExprClass:
3481 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ChooseExprClass");
3475 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ChooseExprClass");
34823476 return ErrorUnexpected;
34833477 case clang::Stmt::CompoundLiteralExprClass:
3484 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CompoundLiteralExprClass");
3478 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CompoundLiteralExprClass");
34853479 return ErrorUnexpected;
34863480 case clang::Stmt::ConvertVectorExprClass:
3487 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ConvertVectorExprClass");
3481 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ConvertVectorExprClass");
34883482 return ErrorUnexpected;
34893483 case clang::Stmt::CoawaitExprClass:
3490 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoawaitExprClass");
3484 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CoawaitExprClass");
34913485 return ErrorUnexpected;
34923486 case clang::Stmt::CoyieldExprClass:
3493 emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoyieldExprClass");
3487 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CoyieldExprClass");
34943488 return ErrorUnexpected;
34953489 case clang::Stmt::DependentCoawaitExprClass:
3496 emit_warning(c, stmt->getBeginLoc(), "TODO handle C DependentCoawaitExprClass");
3490 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C DependentCoawaitExprClass");
34973491 return ErrorUnexpected;
34983492 case clang::Stmt::DependentScopeDeclRefExprClass:
3499 emit_warning(c, stmt->getBeginLoc(), "TODO handle C DependentScopeDeclRefExprClass");
3493 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C DependentScopeDeclRefExprClass");
35003494 return ErrorUnexpected;
35013495 case clang::Stmt::DesignatedInitExprClass:
3502 emit_warning(c, stmt->getBeginLoc(), "TODO handle C DesignatedInitExprClass");
3496 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C DesignatedInitExprClass");
35033497 return ErrorUnexpected;
35043498 case clang::Stmt::DesignatedInitUpdateExprClass:
3505 emit_warning(c, stmt->getBeginLoc(), "TODO handle C DesignatedInitUpdateExprClass");
3499 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C DesignatedInitUpdateExprClass");
35063500 return ErrorUnexpected;
35073501 case clang::Stmt::ExpressionTraitExprClass:
3508 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExpressionTraitExprClass");
3502 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExpressionTraitExprClass");
35093503 return ErrorUnexpected;
35103504 case clang::Stmt::ExtVectorElementExprClass:
3511 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExtVectorElementExprClass");
3505 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExtVectorElementExprClass");
35123506 return ErrorUnexpected;
35133507 case clang::Stmt::FixedPointLiteralClass:
3514 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FixedPointLiteralClass");
3508 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FixedPointLiteralClass");
35153509 return ErrorUnexpected;
35163510 case clang::Stmt::FloatingLiteralClass:
3517 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FloatingLiteralClass");
3511 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FloatingLiteralClass");
35183512 return ErrorUnexpected;
35193513 case clang::Stmt::ExprWithCleanupsClass:
3520 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExprWithCleanupsClass");
3514 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExprWithCleanupsClass");
35213515 return ErrorUnexpected;
35223516 case clang::Stmt::FunctionParmPackExprClass:
3523 emit_warning(c, stmt->getBeginLoc(), "TODO handle C FunctionParmPackExprClass");
3517 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FunctionParmPackExprClass");
35243518 return ErrorUnexpected;
35253519 case clang::Stmt::GNUNullExprClass:
3526 emit_warning(c, stmt->getBeginLoc(), "TODO handle C GNUNullExprClass");
3520 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C GNUNullExprClass");
35273521 return ErrorUnexpected;
35283522 case clang::Stmt::GenericSelectionExprClass:
3529 emit_warning(c, stmt->getBeginLoc(), "TODO handle C GenericSelectionExprClass");
3523 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C GenericSelectionExprClass");
35303524 return ErrorUnexpected;
35313525 case clang::Stmt::ImaginaryLiteralClass:
3532 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImaginaryLiteralClass");
3526 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ImaginaryLiteralClass");
35333527 return ErrorUnexpected;
35343528 case clang::Stmt::ImplicitValueInitExprClass:
3535 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImplicitValueInitExprClass");
3529 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ImplicitValueInitExprClass");
35363530 return ErrorUnexpected;
35373531 case clang::Stmt::InitListExprClass:
3538 emit_warning(c, stmt->getBeginLoc(), "TODO handle C InitListExprClass");
3532 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C InitListExprClass");
35393533 return ErrorUnexpected;
35403534 case clang::Stmt::LambdaExprClass:
3541 emit_warning(c, stmt->getBeginLoc(), "TODO handle C LambdaExprClass");
3535 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C LambdaExprClass");
35423536 return ErrorUnexpected;
35433537 case clang::Stmt::MSPropertyRefExprClass:
3544 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSPropertyRefExprClass");
3538 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSPropertyRefExprClass");
35453539 return ErrorUnexpected;
35463540 case clang::Stmt::MSPropertySubscriptExprClass:
3547 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSPropertySubscriptExprClass");
3541 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSPropertySubscriptExprClass");
35483542 return ErrorUnexpected;
35493543 case clang::Stmt::MaterializeTemporaryExprClass:
3550 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MaterializeTemporaryExprClass");
3544 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MaterializeTemporaryExprClass");
35513545 return ErrorUnexpected;
35523546 case clang::Stmt::NoInitExprClass:
3553 emit_warning(c, stmt->getBeginLoc(), "TODO handle C NoInitExprClass");
3547 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NoInitExprClass");
35543548 return ErrorUnexpected;
35553549 case clang::Stmt::OMPArraySectionExprClass:
3556 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPArraySectionExprClass");
3550 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPArraySectionExprClass");
35573551 return ErrorUnexpected;
35583552 case clang::Stmt::ObjCArrayLiteralClass:
3559 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCArrayLiteralClass");
3553 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCArrayLiteralClass");
35603554 return ErrorUnexpected;
35613555 case clang::Stmt::ObjCAvailabilityCheckExprClass:
3562 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAvailabilityCheckExprClass");
3556 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAvailabilityCheckExprClass");
35633557 return ErrorUnexpected;
35643558 case clang::Stmt::ObjCBoolLiteralExprClass:
3565 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBoolLiteralExprClass");
3559 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCBoolLiteralExprClass");
35663560 return ErrorUnexpected;
35673561 case clang::Stmt::ObjCBoxedExprClass:
3568 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBoxedExprClass");
3562 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCBoxedExprClass");
35693563 return ErrorUnexpected;
35703564 case clang::Stmt::ObjCDictionaryLiteralClass:
3571 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCDictionaryLiteralClass");
3565 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCDictionaryLiteralClass");
35723566 return ErrorUnexpected;
35733567 case clang::Stmt::ObjCEncodeExprClass:
3574 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCEncodeExprClass");
3568 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCEncodeExprClass");
35753569 return ErrorUnexpected;
35763570 case clang::Stmt::ObjCIndirectCopyRestoreExprClass:
3577 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIndirectCopyRestoreExprClass");
3571 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIndirectCopyRestoreExprClass");
35783572 return ErrorUnexpected;
35793573 case clang::Stmt::ObjCIsaExprClass:
3580 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIsaExprClass");
3574 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIsaExprClass");
35813575 return ErrorUnexpected;
35823576 case clang::Stmt::ObjCIvarRefExprClass:
3583 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIvarRefExprClass");
3577 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIvarRefExprClass");
35843578 return ErrorUnexpected;
35853579 case clang::Stmt::ObjCMessageExprClass:
3586 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCMessageExprClass");
3580 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCMessageExprClass");
35873581 return ErrorUnexpected;
35883582 case clang::Stmt::ObjCPropertyRefExprClass:
3589 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCPropertyRefExprClass");
3583 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCPropertyRefExprClass");
35903584 return ErrorUnexpected;
35913585 case clang::Stmt::ObjCProtocolExprClass:
3592 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProtocolExprClass");
3586 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProtocolExprClass");
35933587 return ErrorUnexpected;
35943588 case clang::Stmt::ObjCSelectorExprClass:
3595 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCSelectorExprClass");
3589 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCSelectorExprClass");
35963590 return ErrorUnexpected;
35973591 case clang::Stmt::ObjCStringLiteralClass:
3598 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCStringLiteralClass");
3592 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCStringLiteralClass");
35993593 return ErrorUnexpected;
36003594 case clang::Stmt::ObjCSubscriptRefExprClass:
3601 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCSubscriptRefExprClass");
3595 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCSubscriptRefExprClass");
36023596 return ErrorUnexpected;
36033597 case clang::Stmt::OffsetOfExprClass:
3604 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OffsetOfExprClass");
3598 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OffsetOfExprClass");
36053599 return ErrorUnexpected;
36063600 case clang::Stmt::OpaqueValueExprClass:
3607 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OpaqueValueExprClass");
3601 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OpaqueValueExprClass");
36083602 return ErrorUnexpected;
36093603 case clang::Stmt::UnresolvedLookupExprClass:
3610 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedLookupExprClass");
3604 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedLookupExprClass");
36113605 return ErrorUnexpected;
36123606 case clang::Stmt::UnresolvedMemberExprClass:
3613 emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedMemberExprClass");
3607 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedMemberExprClass");
36143608 return ErrorUnexpected;
36153609 case clang::Stmt::PackExpansionExprClass:
3616 emit_warning(c, stmt->getBeginLoc(), "TODO handle C PackExpansionExprClass");
3610 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PackExpansionExprClass");
36173611 return ErrorUnexpected;
36183612 case clang::Stmt::ParenListExprClass:
3619 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ParenListExprClass");
3613 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ParenListExprClass");
36203614 return ErrorUnexpected;
36213615 case clang::Stmt::PseudoObjectExprClass:
3622 emit_warning(c, stmt->getBeginLoc(), "TODO handle C PseudoObjectExprClass");
3616 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PseudoObjectExprClass");
36233617 return ErrorUnexpected;
36243618 case clang::Stmt::ShuffleVectorExprClass:
3625 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ShuffleVectorExprClass");
3619 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ShuffleVectorExprClass");
36263620 return ErrorUnexpected;
36273621 case clang::Stmt::SizeOfPackExprClass:
3628 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SizeOfPackExprClass");
3622 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SizeOfPackExprClass");
36293623 return ErrorUnexpected;
36303624 case clang::Stmt::SubstNonTypeTemplateParmExprClass:
3631 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SubstNonTypeTemplateParmExprClass");
3625 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SubstNonTypeTemplateParmExprClass");
36323626 return ErrorUnexpected;
36333627 case clang::Stmt::SubstNonTypeTemplateParmPackExprClass:
3634 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SubstNonTypeTemplateParmPackExprClass");
3628 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SubstNonTypeTemplateParmPackExprClass");
36353629 return ErrorUnexpected;
36363630 case clang::Stmt::TypeTraitExprClass:
3637 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeTraitExprClass");
3631 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeTraitExprClass");
36383632 return ErrorUnexpected;
36393633 case clang::Stmt::TypoExprClass:
3640 emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypoExprClass");
3634 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypoExprClass");
36413635 return ErrorUnexpected;
36423636 case clang::Stmt::VAArgExprClass:
3643 emit_warning(c, stmt->getBeginLoc(), "TODO handle C VAArgExprClass");
3637 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VAArgExprClass");
36443638 return ErrorUnexpected;
36453639 case clang::Stmt::GotoStmtClass:
3646 emit_warning(c, stmt->getBeginLoc(), "TODO handle C GotoStmtClass");
3640 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C GotoStmtClass");
36473641 return ErrorUnexpected;
36483642 case clang::Stmt::IndirectGotoStmtClass:
3649 emit_warning(c, stmt->getBeginLoc(), "TODO handle C IndirectGotoStmtClass");
3643 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C IndirectGotoStmtClass");
36503644 return ErrorUnexpected;
36513645 case clang::Stmt::LabelStmtClass:
3652 emit_warning(c, stmt->getBeginLoc(), "TODO handle C LabelStmtClass");
3646 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C LabelStmtClass");
36533647 return ErrorUnexpected;
36543648 case clang::Stmt::MSDependentExistsStmtClass:
3655 emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSDependentExistsStmtClass");
3649 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSDependentExistsStmtClass");
36563650 return ErrorUnexpected;
36573651 case clang::Stmt::OMPAtomicDirectiveClass:
3658 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPAtomicDirectiveClass");
3652 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPAtomicDirectiveClass");
36593653 return ErrorUnexpected;
36603654 case clang::Stmt::OMPBarrierDirectiveClass:
3661 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPBarrierDirectiveClass");
3655 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPBarrierDirectiveClass");
36623656 return ErrorUnexpected;
36633657 case clang::Stmt::OMPCancelDirectiveClass:
3664 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCancelDirectiveClass");
3658 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCancelDirectiveClass");
36653659 return ErrorUnexpected;
36663660 case clang::Stmt::OMPCancellationPointDirectiveClass:
3667 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCancellationPointDirectiveClass");
3661 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCancellationPointDirectiveClass");
36683662 return ErrorUnexpected;
36693663 case clang::Stmt::OMPCriticalDirectiveClass:
3670 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCriticalDirectiveClass");
3664 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCriticalDirectiveClass");
36713665 return ErrorUnexpected;
36723666 case clang::Stmt::OMPFlushDirectiveClass:
3673 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPFlushDirectiveClass");
3667 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPFlushDirectiveClass");
36743668 return ErrorUnexpected;
36753669 case clang::Stmt::OMPDistributeDirectiveClass:
3676 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeDirectiveClass");
3670 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDistributeDirectiveClass");
36773671 return ErrorUnexpected;
36783672 case clang::Stmt::OMPDistributeParallelForDirectiveClass:
3679 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeParallelForDirectiveClass");
3673 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDistributeParallelForDirectiveClass");
36803674 return ErrorUnexpected;
36813675 case clang::Stmt::OMPDistributeParallelForSimdDirectiveClass:
3682 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeParallelForSimdDirectiveClass");
3676 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDistributeParallelForSimdDirectiveClass");
36833677 return ErrorUnexpected;
36843678 case clang::Stmt::OMPDistributeSimdDirectiveClass:
3685 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeSimdDirectiveClass");
3679 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDistributeSimdDirectiveClass");
36863680 return ErrorUnexpected;
36873681 case clang::Stmt::OMPForDirectiveClass:
3688 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPForDirectiveClass");
3682 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPForDirectiveClass");
36893683 return ErrorUnexpected;
36903684 case clang::Stmt::OMPForSimdDirectiveClass:
3691 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPForSimdDirectiveClass");
3685 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPForSimdDirectiveClass");
36923686 return ErrorUnexpected;
36933687 case clang::Stmt::OMPParallelForDirectiveClass:
3694 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelForDirectiveClass");
3688 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPParallelForDirectiveClass");
36953689 return ErrorUnexpected;
36963690 case clang::Stmt::OMPParallelForSimdDirectiveClass:
3697 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelForSimdDirectiveClass");
3691 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPParallelForSimdDirectiveClass");
36983692 return ErrorUnexpected;
36993693 case clang::Stmt::OMPSimdDirectiveClass:
3700 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSimdDirectiveClass");
3694 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPSimdDirectiveClass");
37013695 return ErrorUnexpected;
37023696 case clang::Stmt::OMPTargetParallelForSimdDirectiveClass:
3703 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelForSimdDirectiveClass");
3697 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetParallelForSimdDirectiveClass");
37043698 return ErrorUnexpected;
37053699 case clang::Stmt::OMPTargetSimdDirectiveClass:
3706 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetSimdDirectiveClass");
3700 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetSimdDirectiveClass");
37073701 return ErrorUnexpected;
37083702 case clang::Stmt::OMPTargetTeamsDistributeDirectiveClass:
3709 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeDirectiveClass");
3703 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetTeamsDistributeDirectiveClass");
37103704 return ErrorUnexpected;
37113705 case clang::Stmt::OMPTargetTeamsDistributeParallelForDirectiveClass:
3712 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeParallelForDirectiveClass");
3706 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetTeamsDistributeParallelForDirectiveClass");
37133707 return ErrorUnexpected;
37143708 case clang::Stmt::OMPTargetTeamsDistributeParallelForSimdDirectiveClass:
3715 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeParallelForSimdDirectiveClass");
3709 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetTeamsDistributeParallelForSimdDirectiveClass");
37163710 return ErrorUnexpected;
37173711 case clang::Stmt::OMPTargetTeamsDistributeSimdDirectiveClass:
3718 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeSimdDirectiveClass");
3712 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetTeamsDistributeSimdDirectiveClass");
37193713 return ErrorUnexpected;
37203714 case clang::Stmt::OMPTaskLoopDirectiveClass:
3721 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskLoopDirectiveClass");
3715 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskLoopDirectiveClass");
37223716 return ErrorUnexpected;
37233717 case clang::Stmt::OMPTaskLoopSimdDirectiveClass:
3724 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskLoopSimdDirectiveClass");
3718 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskLoopSimdDirectiveClass");
37253719 return ErrorUnexpected;
37263720 case clang::Stmt::OMPTeamsDistributeDirectiveClass:
3727 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeDirectiveClass");
3721 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTeamsDistributeDirectiveClass");
37283722 return ErrorUnexpected;
37293723 case clang::Stmt::OMPTeamsDistributeParallelForDirectiveClass:
3730 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeParallelForDirectiveClass");
3724 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTeamsDistributeParallelForDirectiveClass");
37313725 return ErrorUnexpected;
37323726 case clang::Stmt::OMPTeamsDistributeParallelForSimdDirectiveClass:
3733 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeParallelForSimdDirectiveClass");
3727 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTeamsDistributeParallelForSimdDirectiveClass");
37343728 return ErrorUnexpected;
37353729 case clang::Stmt::OMPTeamsDistributeSimdDirectiveClass:
3736 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeSimdDirectiveClass");
3730 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTeamsDistributeSimdDirectiveClass");
37373731 return ErrorUnexpected;
37383732 case clang::Stmt::OMPMasterDirectiveClass:
3739 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPMasterDirectiveClass");
3733 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPMasterDirectiveClass");
37403734 return ErrorUnexpected;
37413735 case clang::Stmt::OMPOrderedDirectiveClass:
3742 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPOrderedDirectiveClass");
3736 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPOrderedDirectiveClass");
37433737 return ErrorUnexpected;
37443738 case clang::Stmt::OMPParallelDirectiveClass:
3745 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelDirectiveClass");
3739 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPParallelDirectiveClass");
37463740 return ErrorUnexpected;
37473741 case clang::Stmt::OMPParallelSectionsDirectiveClass:
3748 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelSectionsDirectiveClass");
3742 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPParallelSectionsDirectiveClass");
37493743 return ErrorUnexpected;
37503744 case clang::Stmt::OMPSectionDirectiveClass:
3751 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSectionDirectiveClass");
3745 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPSectionDirectiveClass");
37523746 return ErrorUnexpected;
37533747 case clang::Stmt::OMPSectionsDirectiveClass:
3754 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSectionsDirectiveClass");
3748 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPSectionsDirectiveClass");
37553749 return ErrorUnexpected;
37563750 case clang::Stmt::OMPSingleDirectiveClass:
3757 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSingleDirectiveClass");
3751 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPSingleDirectiveClass");
37583752 return ErrorUnexpected;
37593753 case clang::Stmt::OMPTargetDataDirectiveClass:
3760 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetDataDirectiveClass");
3754 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetDataDirectiveClass");
37613755 return ErrorUnexpected;
37623756 case clang::Stmt::OMPTargetDirectiveClass:
3763 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetDirectiveClass");
3757 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetDirectiveClass");
37643758 return ErrorUnexpected;
37653759 case clang::Stmt::OMPTargetEnterDataDirectiveClass:
3766 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetEnterDataDirectiveClass");
3760 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetEnterDataDirectiveClass");
37673761 return ErrorUnexpected;
37683762 case clang::Stmt::OMPTargetExitDataDirectiveClass:
3769 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetExitDataDirectiveClass");
3763 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetExitDataDirectiveClass");
37703764 return ErrorUnexpected;
37713765 case clang::Stmt::OMPTargetParallelDirectiveClass:
3772 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelDirectiveClass");
3766 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetParallelDirectiveClass");
37733767 return ErrorUnexpected;
37743768 case clang::Stmt::OMPTargetParallelForDirectiveClass:
3775 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelForDirectiveClass");
3769 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetParallelForDirectiveClass");
37763770 return ErrorUnexpected;
37773771 case clang::Stmt::OMPTargetTeamsDirectiveClass:
3778 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDirectiveClass");
3772 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetTeamsDirectiveClass");
37793773 return ErrorUnexpected;
37803774 case clang::Stmt::OMPTargetUpdateDirectiveClass:
3781 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetUpdateDirectiveClass");
3775 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTargetUpdateDirectiveClass");
37823776 return ErrorUnexpected;
37833777 case clang::Stmt::OMPTaskDirectiveClass:
3784 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskDirectiveClass");
3778 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskDirectiveClass");
37853779 return ErrorUnexpected;
37863780 case clang::Stmt::OMPTaskgroupDirectiveClass:
3787 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskgroupDirectiveClass");
3781 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskgroupDirectiveClass");
37883782 return ErrorUnexpected;
37893783 case clang::Stmt::OMPTaskwaitDirectiveClass:
3790 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskwaitDirectiveClass");
3784 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskwaitDirectiveClass");
37913785 return ErrorUnexpected;
37923786 case clang::Stmt::OMPTaskyieldDirectiveClass:
3793 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskyieldDirectiveClass");
3787 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTaskyieldDirectiveClass");
37943788 return ErrorUnexpected;
37953789 case clang::Stmt::OMPTeamsDirectiveClass:
3796 emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDirectiveClass");
3790 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPTeamsDirectiveClass");
37973791 return ErrorUnexpected;
37983792 case clang::Stmt::ObjCAtCatchStmtClass:
3799 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtCatchStmtClass");
3793 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtCatchStmtClass");
38003794 return ErrorUnexpected;
38013795 case clang::Stmt::ObjCAtFinallyStmtClass:
3802 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtFinallyStmtClass");
3796 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtFinallyStmtClass");
38033797 return ErrorUnexpected;
38043798 case clang::Stmt::ObjCAtSynchronizedStmtClass:
3805 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtSynchronizedStmtClass");
3799 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtSynchronizedStmtClass");
38063800 return ErrorUnexpected;
38073801 case clang::Stmt::ObjCAtThrowStmtClass:
3808 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtThrowStmtClass");
3802 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtThrowStmtClass");
38093803 return ErrorUnexpected;
38103804 case clang::Stmt::ObjCAtTryStmtClass:
3811 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtTryStmtClass");
3805 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtTryStmtClass");
38123806 return ErrorUnexpected;
38133807 case clang::Stmt::ObjCAutoreleasePoolStmtClass:
3814 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAutoreleasePoolStmtClass");
3808 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAutoreleasePoolStmtClass");
38153809 return ErrorUnexpected;
38163810 case clang::Stmt::ObjCForCollectionStmtClass:
3817 emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCForCollectionStmtClass");
3811 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCForCollectionStmtClass");
38183812 return ErrorUnexpected;
38193813 case clang::Stmt::SEHExceptStmtClass:
3820 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHExceptStmtClass");
3814 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SEHExceptStmtClass");
38213815 return ErrorUnexpected;
38223816 case clang::Stmt::SEHFinallyStmtClass:
3823 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHFinallyStmtClass");
3817 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SEHFinallyStmtClass");
38243818 return ErrorUnexpected;
38253819 case clang::Stmt::SEHLeaveStmtClass:
3826 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHLeaveStmtClass");
3820 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SEHLeaveStmtClass");
38273821 return ErrorUnexpected;
38283822 case clang::Stmt::SEHTryStmtClass:
3829 emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHTryStmtClass");
3823 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C SEHTryStmtClass");
38303824 return ErrorUnexpected;
38313825 }
38323826 zig_unreachable();
......@@ -3855,16 +3849,16 @@ static TransScope *trans_stmt(Context *c, TransScope *scope, const clang::Stmt *
38553849}
38563850
38573851static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
3858 Buf *fn_name = buf_create_from_str(decl_name(fn_decl));
3852 Buf *fn_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)fn_decl));
38593853
38603854 if (get_global(c, fn_name)) {
38613855 // we already saw this function
38623856 return;
38633857 }
38643858
3865 AstNode *proto_node = trans_qual_type(c, fn_decl->getType(), fn_decl->getLocation());
3859 AstNode *proto_node = trans_qual_type(c, fn_decl->getType(), bitcast(fn_decl->getLocation()));
38663860 if (proto_node == nullptr) {
3867 emit_warning(c, fn_decl->getLocation(), "unable to resolve prototype of function '%s'", buf_ptr(fn_name));
3861 emit_warning(c, bitcast(fn_decl->getLocation()), "unable to resolve prototype of function '%s'", buf_ptr(fn_name));
38683862 return;
38693863 }
38703864
......@@ -3878,10 +3872,10 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
38783872 } else if (sc == clang::SC_Extern || sc == clang::SC_Static) {
38793873 proto_node->data.fn_proto.visib_mod = c->visib_mod;
38803874 } else if (sc == clang::SC_PrivateExtern) {
3881 emit_warning(c, fn_decl->getLocation(), "unsupported storage class: private extern");
3875 emit_warning(c, bitcast(fn_decl->getLocation()), "unsupported storage class: private extern");
38823876 return;
38833877 } else {
3884 emit_warning(c, fn_decl->getLocation(), "unsupported storage class: unknown");
3878 emit_warning(c, bitcast(fn_decl->getLocation()), "unsupported storage class: unknown");
38853879 return;
38863880 }
38873881
......@@ -3890,7 +3884,7 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
38903884 for (size_t i = 0; i < proto_node->data.fn_proto.params.length; i += 1) {
38913885 AstNode *param_node = proto_node->data.fn_proto.params.at(i);
38923886 const clang::ParmVarDecl *param = fn_decl->getParamDecl(i);
3893 const char *name = decl_name(param);
3887 const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)param);
38943888
38953889 Buf *proto_param_name;
38963890 if (strlen(name) != 0) {
......@@ -3920,7 +3914,7 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
39203914 AstNode *actual_body_node;
39213915 TransScope *result_scope = trans_stmt(c, scope, body, &actual_body_node);
39223916 if (result_scope == nullptr) {
3923 emit_warning(c, fn_decl->getLocation(), "unable to translate function");
3917 emit_warning(c, bitcast(fn_decl->getLocation()), "unable to translate function");
39243918 return;
39253919 }
39263920 assert(actual_body_node != nullptr);
......@@ -3971,7 +3965,7 @@ static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *t
39713965 }
39723966
39733967 clang::QualType child_qt = typedef_decl->getUnderlyingType();
3974 Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
3968 Buf *type_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl));
39753969
39763970 if (buf_eql_str(type_name, "uint8_t")) {
39773971 return resolve_typdef_as_builtin(c, typedef_decl, "u8");
......@@ -4007,9 +4001,9 @@ static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *t
40074001 AstNode *symbol_node = trans_create_node_symbol(c, type_name);
40084002 c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node);
40094003
4010 AstNode *type_node = trans_qual_type(c, child_qt, typedef_decl->getLocation());
4004 AstNode *type_node = trans_qual_type(c, child_qt, bitcast(typedef_decl->getLocation()));
40114005 if (type_node == nullptr) {
4012 emit_warning(c, typedef_decl->getLocation(), "typedef %s - unresolved child type", buf_ptr(type_name));
4006 emit_warning(c, bitcast(typedef_decl->getLocation()), "typedef %s - unresolved child type", buf_ptr(type_name));
40134007 c->decl_table.put(typedef_decl, nullptr);
40144008 // TODO add global var with type_name equal to @compileError("unable to resolve C type")
40154009 return nullptr;
......@@ -4040,7 +4034,7 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
40404034 return existing_entry->value;
40414035 }
40424036
4043 const char *raw_name = decl_name(enum_decl);
4037 const char *raw_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_decl);
40444038 bool is_anonymous = (raw_name[0] == 0);
40454039 Buf *bare_name = is_anonymous ? nullptr : buf_create_from_str(raw_name);
40464040 Buf *full_type_name = is_anonymous ? nullptr : buf_sprintf("enum_%s", buf_ptr(bare_name));
......@@ -4062,7 +4056,7 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
40624056 pure_enum = false;
40634057 }
40644058 }
4065 AstNode *tag_int_type = trans_qual_type(c, enum_decl->getIntegerType(), enum_decl->getLocation());
4059 AstNode *tag_int_type = trans_qual_type(c, enum_decl->getIntegerType(), bitcast(enum_decl->getLocation()));
40664060 assert(tag_int_type);
40674061
40684062 AstNode *enum_node = trans_create_node(c, NodeTypeContainerDecl);
......@@ -4084,7 +4078,7 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
40844078 {
40854079 const clang::EnumConstantDecl *enum_const = *it;
40864080
4087 Buf *enum_val_name = buf_create_from_str(decl_name(enum_const));
4081 Buf *enum_val_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_const));
40884082 Buf *field_name;
40894083 if (bare_name != nullptr && buf_starts_with_buf(enum_val_name, bare_name)) {
40904084 field_name = buf_slice(enum_val_name, buf_len(bare_name), buf_len(enum_val_name));
......@@ -4102,7 +4096,7 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
41024096 // in C each enum value is in the global namespace. so we put them there too.
41034097 // at this point we can rely on the enum emitting successfully
41044098 if (is_anonymous) {
4105 Buf *enum_val_name = buf_create_from_str(decl_name(enum_const));
4099 Buf *enum_val_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_const));
41064100 add_global_var(c, enum_val_name, int_node);
41074101 } else {
41084102 AstNode *field_access_node = trans_create_node_field_access(c,
......@@ -4123,62 +4117,63 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
41234117 }
41244118}
41254119
4126static AstNode *demote_struct_to_opaque(Context *c, const clang::RecordDecl *record_decl,
4120static AstNode *demote_struct_to_opaque(Context *c, const ZigClangRecordDecl *record_decl,
41274121 Buf *full_type_name, Buf *bare_name)
41284122{
41294123 AstNode *opaque_node = trans_create_node_opaque(c);
41304124 if (full_type_name == nullptr) {
4131 c->decl_table.put(record_decl->getCanonicalDecl(), opaque_node);
4125 c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), opaque_node);
41324126 return opaque_node;
41334127 }
41344128 AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
41354129 add_global_weak_alias(c, bare_name, full_type_name);
41364130 add_global_var(c, full_type_name, opaque_node);
4137 c->decl_table.put(record_decl->getCanonicalDecl(), symbol_node);
4131 c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), symbol_node);
41384132 return symbol_node;
41394133}
41404134
4141static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_decl) {
4142 auto existing_entry = c->decl_table.maybe_get((void*)record_decl->getCanonicalDecl());
4135static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record_decl) {
4136 auto existing_entry = c->decl_table.maybe_get(ZigClangRecordDecl_getCanonicalDecl(record_decl));
41434137 if (existing_entry) {
41444138 return existing_entry->value;
41454139 }
41464140
4147 const char *raw_name = decl_name(record_decl);
4141 const char *raw_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)record_decl);
41484142 const char *container_kind_name;
41494143 ContainerKind container_kind;
4150 if (record_decl->isUnion()) {
4144 if (ZigClangRecordDecl_isUnion(record_decl)) {
41514145 container_kind_name = "union";
41524146 container_kind = ContainerKindUnion;
4153 } else if (record_decl->isStruct()) {
4147 } else if (ZigClangRecordDecl_isStruct(record_decl)) {
41544148 container_kind_name = "struct";
41554149 container_kind = ContainerKindStruct;
41564150 } else {
4157 emit_warning(c, record_decl->getLocation(), "skipping record %s, not a struct or union", raw_name);
4158 c->decl_table.put(record_decl->getCanonicalDecl(), nullptr);
4151 emit_warning(c, ZigClangRecordDecl_getLocation(record_decl),
4152 "skipping record %s, not a struct or union", raw_name);
4153 c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), nullptr);
41594154 return nullptr;
41604155 }
41614156
4162 bool is_anonymous = record_decl->isAnonymousStructOrUnion() || raw_name[0] == 0;
4157 bool is_anonymous = ZigClangRecordDecl_isAnonymousStructOrUnion(record_decl) || raw_name[0] == 0;
41634158 Buf *bare_name = is_anonymous ? nullptr : buf_create_from_str(raw_name);
41644159 Buf *full_type_name = (bare_name == nullptr) ?
41654160 nullptr : buf_sprintf("%s_%s", container_kind_name, buf_ptr(bare_name));
41664161
4167 clang::RecordDecl *record_def = record_decl->getDefinition();
4162 const ZigClangRecordDecl *record_def = ZigClangRecordDecl_getDefinition(record_decl);
41684163 if (record_def == nullptr) {
41694164 return demote_struct_to_opaque(c, record_decl, full_type_name, bare_name);
41704165 }
41714166
41724167 // count fields and validate
41734168 uint32_t field_count = 0;
4174 for (auto it = record_def->field_begin(),
4175 it_end = record_def->field_end();
4169 for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
4170 it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
41764171 it != it_end; ++it, field_count += 1)
41774172 {
41784173 const clang::FieldDecl *field_decl = *it;
41794174
41804175 if (field_decl->isBitField()) {
4181 emit_warning(c, field_decl->getLocation(), "%s %s demoted to opaque type - has bitfield",
4176 emit_warning(c, bitcast(field_decl->getLocation()), "%s %s demoted to opaque type - has bitfield",
41824177 container_kind_name,
41834178 is_anonymous ? "(anon)" : buf_ptr(bare_name));
41844179 return demote_struct_to_opaque(c, record_decl, full_type_name, bare_name);
......@@ -4195,24 +4190,25 @@ static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_
41954190
41964191 // must be before fields in case a circular reference happens
41974192 if (is_anonymous) {
4198 c->decl_table.put(record_decl->getCanonicalDecl(), struct_node);
4193 c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), struct_node);
41994194 } else {
4200 c->decl_table.put(record_decl->getCanonicalDecl(), trans_create_node_symbol(c, full_type_name));
4195 c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), trans_create_node_symbol(c, full_type_name));
42014196 }
42024197
42034198 uint32_t i = 0;
4204 for (auto it = record_def->field_begin(),
4205 it_end = record_def->field_end();
4199 for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
4200 it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
42064201 it != it_end; ++it, i += 1)
42074202 {
42084203 const clang::FieldDecl *field_decl = *it;
42094204
42104205 AstNode *field_node = trans_create_node(c, NodeTypeStructField);
4211 field_node->data.struct_field.name = buf_create_from_str(decl_name(field_decl));
4212 field_node->data.struct_field.type = trans_qual_type(c, field_decl->getType(), field_decl->getLocation());
4206 field_node->data.struct_field.name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)field_decl));
4207 field_node->data.struct_field.type = trans_qual_type(c, field_decl->getType(),
4208 bitcast(field_decl->getLocation()));
42134209
42144210 if (field_node->data.struct_field.type == nullptr) {
4215 emit_warning(c, field_decl->getLocation(),
4211 emit_warning(c, bitcast(field_decl->getLocation()),
42164212 "%s %s demoted to opaque type - unresolved type",
42174213 container_kind_name,
42184214 is_anonymous ? "(anon)" : buf_ptr(bare_name));
......@@ -4232,7 +4228,7 @@ static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_
42324228 }
42334229}
42344230
4235static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, const clang::SourceLocation &source_loc) {
4231static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, ZigClangSourceLocation source_loc) {
42364232 switch (ap_value->getKind()) {
42374233 case clang::APValue::Int:
42384234 return trans_create_node_apint(c, ap_value->getInt());
......@@ -4331,25 +4327,25 @@ static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::Qual
43314327}
43324328
43334329static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
4334 Buf *name = buf_create_from_str(decl_name(var_decl));
4330 Buf *name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)var_decl));
43354331
43364332 switch (var_decl->getTLSKind()) {
43374333 case clang::VarDecl::TLS_None:
43384334 break;
43394335 case clang::VarDecl::TLS_Static:
4340 emit_warning(c, var_decl->getLocation(),
4336 emit_warning(c, bitcast(var_decl->getLocation()),
43414337 "ignoring variable '%s' - static thread local storage", buf_ptr(name));
43424338 return;
43434339 case clang::VarDecl::TLS_Dynamic:
4344 emit_warning(c, var_decl->getLocation(),
4340 emit_warning(c, bitcast(var_decl->getLocation()),
43454341 "ignoring variable '%s' - dynamic thread local storage", buf_ptr(name));
43464342 return;
43474343 }
43484344
43494345 clang::QualType qt = var_decl->getType();
4350 AstNode *var_type = trans_qual_type(c, qt, var_decl->getLocation());
4346 AstNode *var_type = trans_qual_type(c, qt, bitcast(var_decl->getLocation()));
43514347 if (var_type == nullptr) {
4352 emit_warning(c, var_decl->getLocation(), "ignoring variable '%s' - unresolved type", buf_ptr(name));
4348 emit_warning(c, bitcast(var_decl->getLocation()), "ignoring variable '%s' - unresolved type", buf_ptr(name));
43534349 return;
43544350 }
43554351
......@@ -4362,11 +4358,11 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
43624358 if (var_decl->hasInit()) {
43634359 clang::APValue *ap_value = var_decl->evaluateValue();
43644360 if (ap_value == nullptr) {
4365 emit_warning(c, var_decl->getLocation(),
4361 emit_warning(c, bitcast(var_decl->getLocation()),
43664362 "ignoring variable '%s' - unable to evaluate initializer", buf_ptr(name));
43674363 return;
43684364 }
4369 init_node = trans_ap_value(c, ap_value, qt, var_decl->getLocation());
4365 init_node = trans_ap_value(c, ap_value, qt, bitcast(var_decl->getLocation()));
43704366 if (init_node == nullptr)
43714367 return;
43724368 } else {
......@@ -4385,7 +4381,7 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
43854381 return;
43864382 }
43874383
4388 emit_warning(c, var_decl->getLocation(),
4384 emit_warning(c, bitcast(var_decl->getLocation()),
43894385 "ignoring variable '%s' - non-extern, non-static variable", buf_ptr(name));
43904386 return;
43914387}
......@@ -4405,13 +4401,13 @@ static bool decl_visitor(void *context, const ZigClangDecl *zdecl) {
44054401 resolve_enum_decl(c, static_cast<const clang::EnumDecl *>(decl));
44064402 break;
44074403 case clang::Decl::Record:
4408 resolve_record_decl(c, static_cast<const clang::RecordDecl *>(decl));
4404 resolve_record_decl(c, (const ZigClangRecordDecl *)(decl));
44094405 break;
44104406 case clang::Decl::Var:
44114407 visit_var_decl(c, static_cast<const clang::VarDecl *>(decl));
44124408 break;
44134409 default:
4414 emit_warning(c, decl->getLocation(), "ignoring %s decl", decl->getDeclKindName());
4410 emit_warning(c, bitcast(decl->getLocation()), "ignoring %s decl", decl->getDeclKindName());
44154411 }
44164412
44174413 return true;
......@@ -4846,10 +4842,10 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
48464842 clang::MacroDefinitionRecord *macro = static_cast<clang::MacroDefinitionRecord *>(entity);
48474843 const char *raw_name = macro->getName()->getNameStart();
48484844 clang::SourceRange range = macro->getSourceRange();
4849 clang::SourceLocation begin_loc = range.getBegin();
4850 clang::SourceLocation end_loc = range.getEnd();
4845 ZigClangSourceLocation begin_loc = bitcast(range.getBegin());
4846 ZigClangSourceLocation end_loc = bitcast(range.getEnd());
48514847
4852 if (begin_loc == end_loc) {
4848 if (ZigClangSourceLocation_eq(begin_loc, end_loc)) {
48534849 // this means it is a macro without a value
48544850 // we don't care about such things
48554851 continue;
......@@ -4859,7 +4855,7 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
48594855 continue;
48604856 }
48614857
4862 const char *begin_c = ZigClangSourceManager_getCharacterData(c->source_manager, bitcast(begin_loc));
4858 const char *begin_c = ZigClangSourceManager_getCharacterData(c->source_manager, begin_loc);
48634859 process_macro(c, &ctok, name, begin_c);
48644860 }
48654861 }
src/zig_clang.cpp+45
......@@ -212,3 +212,48 @@ bool ZigClangASTUnit_visitLocalTopLevelDecls(ZigClangASTUnit *self, void *contex
212212 return reinterpret_cast<clang::ASTUnit *>(self)->visitLocalTopLevelDecls(context,
213213 reinterpret_cast<bool (*)(void *, const clang::Decl *)>(Fn));
214214}
215
216const ZigClangRecordDecl *ZigClangRecordType_getDecl(const ZigClangRecordType *record_ty) {
217 const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordType *>(record_ty)->getDecl();
218 return reinterpret_cast<const ZigClangRecordDecl *>(record_decl);
219}
220
221const ZigClangTagDecl *ZigClangRecordDecl_getCanonicalDecl(const ZigClangRecordDecl *record_decl) {
222 const clang::TagDecl *tag_decl = reinterpret_cast<const clang::RecordDecl*>(record_decl)->getCanonicalDecl();
223 return reinterpret_cast<const ZigClangTagDecl *>(tag_decl);
224}
225
226const ZigClangRecordDecl *ZigClangRecordDecl_getDefinition(const ZigClangRecordDecl *zig_record_decl) {
227 const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordDecl *>(zig_record_decl);
228 const clang::RecordDecl *definition = record_decl->getDefinition();
229 return reinterpret_cast<const ZigClangRecordDecl *>(definition);
230}
231
232bool ZigClangRecordDecl_isUnion(const ZigClangRecordDecl *record_decl) {
233 return reinterpret_cast<const clang::RecordDecl*>(record_decl)->isUnion();
234}
235
236bool ZigClangRecordDecl_isStruct(const ZigClangRecordDecl *record_decl) {
237 return reinterpret_cast<const clang::RecordDecl*>(record_decl)->isStruct();
238}
239
240bool ZigClangRecordDecl_isAnonymousStructOrUnion(const ZigClangRecordDecl *record_decl) {
241 return reinterpret_cast<const clang::RecordDecl*>(record_decl)->isAnonymousStructOrUnion();
242}
243
244const char *ZigClangDecl_getName_bytes_begin(const ZigClangDecl *zig_decl) {
245 const clang::Decl *decl = reinterpret_cast<const clang::Decl *>(zig_decl);
246 const clang::NamedDecl *named_decl = static_cast<const clang::NamedDecl *>(decl);
247 return (const char *)named_decl->getName().bytes_begin();
248}
249
250ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *zig_record_decl) {
251 const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordDecl *>(zig_record_decl);
252 return bitcast(record_decl->getLocation());
253}
254
255bool ZigClangSourceLocation_eq(ZigClangSourceLocation zig_a, ZigClangSourceLocation zig_b) {
256 clang::SourceLocation a = bitcast(zig_a);
257 clang::SourceLocation b = bitcast(zig_b);
258 return a == b;
259}
src/zig_clang.h+15
......@@ -16,6 +16,7 @@
1616
1717// ATTENTION: If you modify this file, be sure to update the corresponding
1818// extern function declarations in the self-hosted compiler.
19// Note: not yet, we don't have the corresponding clang.zig yet.
1920
2021struct ZigClangSourceLocation {
2122 unsigned ID;
......@@ -86,6 +87,7 @@ struct ZigClangStorageClass;
8687struct ZigClangStringLiteral;
8788struct ZigClangStringRef;
8889struct ZigClangSwitchStmt;
90struct ZigClangTagDecl;
8991struct ZigClangType;
9092struct ZigClangTypedefNameDecl;
9193struct ZigClangTypedefType;
......@@ -256,4 +258,17 @@ ZIG_EXTERN_C ZigClangASTContext *ZigClangASTUnit_getASTContext(ZigClangASTUnit *
256258ZIG_EXTERN_C ZigClangSourceManager *ZigClangASTUnit_getSourceManager(ZigClangASTUnit *);
257259ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(ZigClangASTUnit *, void *context,
258260 bool (*Fn)(void *context, const ZigClangDecl *decl));
261
262ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordType_getDecl(const ZigClangRecordType *record_ty);
263
264ZIG_EXTERN_C const ZigClangTagDecl *ZigClangRecordDecl_getCanonicalDecl(const ZigClangRecordDecl *record_decl);
265ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const ZigClangRecordDecl *record_decl);
266ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const ZigClangRecordDecl *record_decl);
267ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const ZigClangRecordDecl *record_decl);
268ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordDecl_getDefinition(const ZigClangRecordDecl *);
269ZIG_EXTERN_C ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *);
270
271ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const ZigClangDecl *decl);
272
273ZIG_EXTERN_C bool ZigClangSourceLocation_eq(ZigClangSourceLocation a, ZigClangSourceLocation b);
259274#endif