Skip to content

Commit 0d57172

Browse files
committed
mostly fixing cpp_mangle
1 parent 6c95fe8 commit 0d57172

File tree

9 files changed

+31
-35
lines changed

9 files changed

+31
-35
lines changed

dm/src/dmc/cgobj.d

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,6 @@ struct Loc
9595

9696
void error(Loc loc, const(char)* format, ...);
9797

98-
version (MARS)
99-
{
100-
// C++ name mangling is handled by front end
101-
const(char)* cpp_mangle(Symbol* s) { return &s.Sident[0]; }
102-
}
10398

10499
}
105100

@@ -2402,9 +2397,9 @@ size_t OmfObj_mangle(Symbol *s,char *dest)
24022397

24032398
//printf("OmfObj_mangle('%s'), mangle = x%x\n",s.Sident.ptr,type_mangle(s.Stype));
24042399
version (SCPP)
2405-
name = CPP ? cpp_mangle(s) : s.Sident.ptr;
2400+
name = CPP ? cpp_mangle(s) : &s.Sident[0];
24062401
else version (MARS)
2407-
name = cast(char*)cpp_mangle(s);
2402+
name = &s.Sident[0];
24082403
else
24092404
static assert(0);
24102405

@@ -2647,7 +2642,7 @@ void OmfObj_pubdef(int seg,Symbol *s,targ_size_t offset)
26472642
char* p;
26482643
uint ti;
26492644

2650-
assert(offset < 100000000);
2645+
assert(offset < 100_000_000);
26512646
obj.resetSymbols.push(s);
26522647

26532648
int idx = SegData[seg].segidx;

dm/src/dmc/dexp2.d

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ __gshared list_t symlist; // for C
7070
extern __gshared ubyte[TYMAX] _tyrelax;
7171
uint type_relax() { return config.flags3 & CFG3relax; } // !=0 if relaxed type checking
7272

73-
uint type_semirelax() { return config.flags3 & CFG3semirelax; } // !=0 if semi-relaxed type checking
73+
// !=0 if semi-relaxed type checking
74+
uint type_semirelax()
75+
{
76+
return config.exe & EX_posix ? (config.flags3 & CFG3semirelax) : type_relax();
77+
}
7478

7579
int REGSIZE() { return _tysize[TYnptr]; }
7680

dm/src/dmc/elfobj.d

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ enum DEST_LEN = (IDMAX + IDOHD + 1);
6666
char *obj_mangle2(Symbol *s,char *dest, size_t *destlen);
6767

6868
version (MARS)
69-
// C++ name mangling is handled by front end
70-
const(char)* cpp_mangle2(Symbol* s) { return s.Sident.ptr; }
69+
{
70+
// C++ name mangling is handled by front end
71+
const(char)* cpp_mangle2(Symbol* s) { return &s.Sident[0]; }
72+
}
7173
else
72-
const(char)* cpp_mangle2(Symbol* s) { return cpp_mangle(s); }
73-
74+
const(char)* cpp_mangle2(Symbol* s) { return cpp_mangle(s); }
7475

7576
void addSegmentToComdat(segidx_t seg, segidx_t comdatseg);
7677

dm/src/dmc/func.d

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,12 @@ void func_body(Symbol *s)
447447
break;
448448

449449
default:
450+
printf("test1 %d\n", config.flags3 & CFG3relax);
451+
type_print(p.Ptype);
452+
type_print(pproto.Ptype);
450453
break;
451454
}
455+
printf("test2\n");
452456
typerr(EM_nomatch_proto,p.Ptype,pproto.Ptype,&sp.Sident[0]);
453457
typeok: ;
454458
}

dm/src/dmc/global.d

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,7 @@ else
103103
Symbol *asm_define_label(const(char)* id);
104104

105105
// cpp.c
106-
version (SCPP)
107-
const(char)* cpp_mangle(Symbol* s);
108-
else version (MARS)
109-
const(char)* cpp_mangle(Symbol* s);
110-
else
111-
const(char)* cpp_mangle(Symbol* s) { return &s.Sident[0]; }
106+
const(char)* cpp_mangle(Symbol* s);
112107

113108
// ee.c
114109
void eecontext_convs(SYMIDX marksi);

dm/src/dmc/machobj.d

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2188,23 +2188,23 @@ char *unsstr (uint value)
21882188
char *obj_mangle2(Symbol *s,char *dest)
21892189
{
21902190
size_t len;
2191-
char *name;
2191+
const(char)* name;
21922192

21932193
//printf("Obj_mangle(s = %p, '%s'), mangle = x%x\n",s,s.Sident.ptr,type_mangle(s.Stype));
21942194
symbol_debug(s);
21952195
assert(dest);
21962196
version (SCPP)
21972197
{
2198-
name = CPP ? cpp_mangle(s) : s.Sident.ptr;
2198+
name = CPP ? cpp_mangle(s) : &s.Sident[0];
21992199
}
22002200
else version (MARS)
22012201
{
22022202
// C++ name mangling is handled by front end
2203-
name = s.Sident.ptr;
2203+
name = &s.Sident[0];
22042204
}
22052205
else
22062206
{
2207-
name = s.Sident.ptr;
2207+
name = &s.Sident[0];
22082208
}
22092209
len = strlen(name); // # of bytes in name
22102210
//dbg_printf("len %d\n",len);

dm/src/dmc/mscoffobj.d

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,12 +1785,12 @@ char *obj_mangle2(Symbol *s,char *dest)
17851785
assert(dest);
17861786

17871787
version (SCPP)
1788-
name = CPP ? cpp_mangle(s) : s.Sident.ptr;
1788+
name = CPP ? cpp_mangle(s) : &s.Sident[0];
17891789
else version (MARS)
17901790
// C++ name mangling is handled by front end
1791-
name = s.Sident.ptr;
1791+
name = &s.Sident[0];
17921792
else
1793-
name = s.Sident.ptr;
1793+
name = &s.Sident[0];
17941794

17951795
len = strlen(name); // # of bytes in name
17961796
//dbg_printf("len %d\n",len);

dm/src/dmc/newman.d

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,10 @@ char *cpp_typetostring(type *t,char *prefix)
511511

512512
version (HTOD)
513513
{
514+
const(char) *cpp_mangle(Symbol *s)
515+
{
516+
return symbol_ident(s);
517+
}
514518
}
515519
else
516520
{

dm/src/dmc/out.d

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,16 +1411,9 @@ version (SCPP)
14111411
else if (config.flags & CFGsegs) // if user set switch for this
14121412
{
14131413
version (SCPP)
1414-
{
1415-
objmod.codeseg(cast(char*)cpp_mangle(funcsym_p),1);
1416-
}
1414+
objmod.codeseg(cpp_mangle(funcsym_p),1);
14171415
else
1418-
{
1419-
if (config.exe & EX_windos)
1420-
objmod.codeseg(cast(char*)cpp_mangle(funcsym_p),1);
1421-
else
1422-
objmod.codeseg(cast(char*)funcsym_p.Sident.ptr, 1);
1423-
}
1416+
objmod.codeseg(&funcsym_p.Sident[0], 1);
14241417
// generate new code segment
14251418
}
14261419
cod3_align(cseg); // align start of function

0 commit comments

Comments
 (0)