forked from OSchip/llvm-project
[Sema] Fix PR38987: keep end location of a direct initializer list
If PerformConstructorInitialization of a direct initializer list constructor is called while instantiating a template, it has brace locations in its BraceLoc arguments but not in the Kind argument. This reverts the hunk https://reviews.llvm.org/D41921#inline-468844. Patch by Orivej Desh! Differential Revision: https://reviews.llvm.org/D53231 llvm-svn: 347261
This commit is contained in:
parent
fdd9b4fc8f
commit
c9a9531a03
|
@ -6186,7 +6186,10 @@ PerformConstructorInitialization(Sema &S,
|
|||
TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo();
|
||||
if (!TSInfo)
|
||||
TSInfo = S.Context.getTrivialTypeSourceInfo(Entity.getType(), Loc);
|
||||
SourceRange ParenOrBraceRange = Kind.getParenOrBraceRange();
|
||||
SourceRange ParenOrBraceRange =
|
||||
(Kind.getKind() == InitializationKind::IK_DirectList)
|
||||
? SourceRange(LBraceLoc, RBraceLoc)
|
||||
: Kind.getParenOrBraceRange();
|
||||
|
||||
if (auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(
|
||||
Step.Function.FoundDecl.getDecl())) {
|
||||
|
|
|
@ -52,6 +52,13 @@ void construct() {
|
|||
// CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'D' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
|
||||
}
|
||||
|
||||
namespace PR38987 {
|
||||
struct A { A(); };
|
||||
template <class T> void f() { T{}; }
|
||||
template void f<A>();
|
||||
// CHECK: CXXTemporaryObjectExpr {{.*}} <col:31, col:33> 'PR38987::A':'PR38987::A'
|
||||
}
|
||||
|
||||
void abort() __attribute__((noreturn));
|
||||
|
||||
namespace std {
|
||||
|
|
Loading…
Reference in New Issue