Skip to content

Commit 8494660

Browse files
committed
[clang][Sema] Bad register variable type error should point to the type
...not the register keyword. Fixes #109776. Until now the error was only tested in clang/test/Sema/asm.c, where you can't check for the "^" character. So I've added a new caret test file as I see has been done for other error types.
1 parent c4952e5 commit 8494660

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

clang/lib/Sema/SemaDecl.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7949,7 +7949,8 @@ NamedDecl *Sema::ActOnVariableDeclarator(
79497949
}
79507950

79517951
if (!R->isIntegralType(Context) && !R->isPointerType()) {
7952-
Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);
7952+
Diag(TInfo->getTypeLoc().getBeginLoc(),
7953+
diag::err_asm_bad_register_type);
79537954
NewVD->setInvalidDecl(true);
79547955
}
79557956
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// RUN: not %clang_cc1 -triple i386-pc-linux-gnu -std=c++11 -fsyntax-only -fno-diagnostics-show-line-numbers -fcaret-diagnostics-max-lines=5 %s 2>&1 | FileCheck %s -strict-whitespace
2+
3+
struct foo {
4+
int a;
5+
};
6+
7+
//CHECK: {{.*}}: error: bad type for named register variable
8+
//CHECK-NEXT: {{^}}register struct foo bar asm("esp");
9+
//CHECK-NEXT: {{^}} ^{{$}}
10+
register struct foo bar asm("esp"); // expected-error {{bad type for named register variable}}
11+
12+
//CHECK: {{.*}}: error: register 'edi' unsuitable for global register variables on this target
13+
//CHECK-NEXT: {{^}}register int r0 asm ("edi");
14+
//CHECK-NEXT: {{^}} ^{{$}}
15+
register int r0 asm ("edi");
16+
17+
//CHECK: {{.*}}: error: size of register 'esp' does not match variable size
18+
//CHECK-NEXT: {{^}}register long long r1 asm ("esp");
19+
//CHECK-NEXT: {{^}} ^{{$}}
20+
register long long r1 asm ("esp");

0 commit comments

Comments
 (0)