Skip to content

Commit 72766d3

Browse files
committed
Wrap initialization of global variables in unsafe
1 parent 2414c36 commit 72766d3

2 files changed

Lines changed: 25 additions & 8 deletions

File tree

cpp2rust/converter/converter.cpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -437,25 +437,40 @@ bool Converter::ConvertLambdaVarDecl(clang::VarDecl *decl) {
437437
return false;
438438
}
439439

440+
void ConvertVarDeclInitializer(clang::VarDecl *decl) {
441+
if (decl->hasInit()) {
442+
ConvertVarInit(decl->getType(), decl->getInit());
443+
} else if (!clang::isa<clang::ParmVarDecl>(decl)) {
444+
StrCat(ConvertVarDefaultInit(decl->getType()));
445+
}
446+
}
447+
440448
void Converter::ConvertVarDecl(clang::VarDecl *decl) {
441449
if (!ConvertVarDeclSkipInit(decl)) {
442450
// Skip global variables declared extern
443451
return;
444452
}
445-
auto qual_type = decl->getType();
446453
PushConstInitializer static_init(*this, decl->isFileVarDecl() ||
447454
decl->isStaticLocal());
448-
if (decl->hasInit()) {
449-
StrCat(token::kAssign);
450-
ConvertVarInit(qual_type, decl->getInit());
451-
} else if (!clang::isa<clang::ParmVarDecl>(decl)) {
452-
StrCat(token::kAssign, ConvertVarDefaultInit(qual_type));
453-
}
455+
StrCat(token::kAssign);
456+
ConvertVarDeclInitializer(decl);
454457
StrCat(token::kSemiColon);
455458
}
456459

457460
void Converter::ConvertGlobalVarDecl(clang::VarDecl *decl) {
458-
ConvertVarDecl(decl);
461+
if (!ConvertVarDeclSkipInit(decl)) {
462+
// Skip global variables declared extern
463+
return;
464+
}
465+
PushConstInitializer static_init(*this, decl->isFileVarDecl() ||
466+
decl->isStaticLocal());
467+
StrCat(token::kAssign);
468+
StrCat(keyword_unsafe_);
469+
{
470+
PushBrace push(*this);
471+
ConvertVarDeclInitializer(decl);
472+
}
473+
StrCat(token::kSemiColon);
459474
}
460475

461476
bool Converter::VisitVarDecl(clang::VarDecl *decl) {

cpp2rust/converter/converter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
8888

8989
void ConvertVarDecl(clang::VarDecl *decl);
9090

91+
void ConvertVarDeclInitializer(clang::VarDecl *decl);
92+
9193
virtual void ConvertGlobalVarDecl(clang::VarDecl *decl);
9294

9395
virtual void ConvertVaListVarDecl(clang::VarDecl *decl);

0 commit comments

Comments
 (0)