-553e04735d1be372c596c720bcaea27e050b13a6
+203cbe7d3820fa03c965a01f72461f71588fe952
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
std::string ret;
const char* p = id.c_str();
const char* pend = p + id.length();
+
+ // A leading ".0" is a space introduced before a mangled type name
+ // that starts with a 'u' or 'U', to avoid confusion with the
+ // mangling used here. We don't need a leading ".0", and we don't
+ // want symbols that start with '.', so remove it.
+ if (p[0] == '.' && p[1] == '0')
+ p += 2;
+
while (p < pend)
{
unsigned int c;
go_assert(!char_needs_encoding(c));
ret += c;
}
- else if (c < 0x10000)
- {
- char buf[16];
- snprintf(buf, sizeof buf, "..u%04x", c);
- ret += buf;
- }
else
{
char buf[16];
- snprintf(buf, sizeof buf, "..U%08x", c);
+ if (c < 0x10000)
+ snprintf(buf, sizeof buf, "..u%04x", c);
+ else
+ snprintf(buf, sizeof buf, "..U%08x", c);
+
+ // We don't want a symbol to start with '.', so add a prefix
+ // if needed.
+ if (ret.empty())
+ ret += '_';
+
ret += buf;
}
p += len;
{
std::string ret;
if (rtype != NULL)
- ret = rtype->mangled_name(this);
+ ret = rtype->deref()->mangled_name(this);
else if (package == NULL)
ret = this->pkgpath_symbol();
else
const Typed_identifier* rcvr =
this->in_function_->func_value()->type()->receiver();
if (rcvr != NULL)
- {
- std::string m = rcvr->type()->mangled_name(gogo);
- // Turn a leading ".1" back into "*" since we are going
- // to type-mangle this name again.
- if (m.compare(0, 2, ".1") == 0)
- m = "*" + m.substr(2);
- ret->append(m);
- }
+ ret->append(rcvr->type()->deref()->mangled_name(gogo));
else if (this->in_function_->package() == NULL)
ret->append(gogo->pkgpath_symbol());
else
const Typed_identifier* rcvr =
in_function->func_value()->type()->receiver();
if (rcvr != NULL)
- ret.append(rcvr->type()->mangled_name(this));
+ ret.append(rcvr->type()->deref()->mangled_name(this));
else if (in_function->package() == NULL)
ret.append(this->pkgpath_symbol());
else
stks := stacks(p)
for _, want := range [][]string{
// {"sync.(*Mutex).Unlock", "pprof.blockMutex.func1"},
- {".1sync.Mutex.Unlock", "pprof.blockMutex..func1"},
+ {"sync.Mutex.Unlock", "pprof.blockMutex..func1"},
} {
if !containsStack(stks, want) {
t.Errorf("No matching stack entry for %+v", want)
pattern='Test([^a-z].*)?'
# The -p option tells GNU nm not to sort.
# The -v option tells Solaris nm to sort by value.
- tests=$($NM -p -v _gotest_.o $xofile | egrep " $text .*\."$pattern'$' | grep -v '\..*\..*\.' | fgrep -v '$' | fgrep -v ' __go_' | sed 's/.* //' | $symtogo)
+ tests=$($NM -p -v _gotest_.o $xofile | egrep " $text .*\."$pattern'$' | grep -v '\..*\.' | fgrep -v '$' | fgrep -v ' __go_' | sed 's/.* //' | $symtogo)
if [ "x$tests" = x ]; then
echo 'gotest: warning: no tests matching '$pattern in _gotest_.o $xofile 1>&2
exit 2