Author: pcc Date: Fri Feb 21 20:59:41 2014 New Revision: 201926 URL: http://llvm.org/viewvc/llvm-project?rev=201926&view=rev Log: Correctly set brace range for CXXConstructExprs formed by list initialization.
Differential Revision: http://llvm-reviews.chandlerc.com/D2711 Modified: cfe/trunk/lib/Sema/SemaInit.cpp cfe/trunk/test/Analysis/inlining/path-notes.cpp cfe/trunk/unittests/AST/SourceLocationTest.cpp Modified: cfe/trunk/lib/Sema/SemaInit.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=201926&r1=201925&r2=201926&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaInit.cpp (original) +++ cfe/trunk/lib/Sema/SemaInit.cpp Fri Feb 21 20:59:41 2014 @@ -5232,10 +5232,13 @@ PerformConstructorInitialization(Sema &S ConstructKind = CXXConstructExpr::CK_Delegating; } - // Only get the parenthesis range if it is a direct construction. - SourceRange parenRange = - Kind.getKind() == InitializationKind::IK_Direct ? - Kind.getParenRange() : SourceRange(); + // Only get the parenthesis or brace range if it is a list initialization or + // direct construction. + SourceRange ParenOrBraceRange; + if (IsListInitialization) + ParenOrBraceRange = SourceRange(LBraceLoc, RBraceLoc); + else if (Kind.getKind() == InitializationKind::IK_Direct) + ParenOrBraceRange = Kind.getParenRange(); // If the entity allows NRVO, mark the construction as elidable // unconditionally. @@ -5247,7 +5250,7 @@ PerformConstructorInitialization(Sema &S IsListInitialization, ConstructorInitRequiresZeroInit, ConstructKind, - parenRange); + ParenOrBraceRange); else CurInit = S.BuildCXXConstructExpr(Loc, Entity.getType(), Constructor, @@ -5256,7 +5259,7 @@ PerformConstructorInitialization(Sema &S IsListInitialization, ConstructorInitRequiresZeroInit, ConstructKind, - parenRange); + ParenOrBraceRange); } if (CurInit.isInvalid()) return ExprError(); Modified: cfe/trunk/test/Analysis/inlining/path-notes.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/inlining/path-notes.cpp?rev=201926&r1=201925&r2=201926&view=diff ============================================================================== --- cfe/trunk/test/Analysis/inlining/path-notes.cpp (original) +++ cfe/trunk/test/Analysis/inlining/path-notes.cpp Fri Feb 21 20:59:41 2014 @@ -1506,7 +1506,7 @@ namespace PR17746 { // CHECK-NEXT: </dict> // CHECK-NEXT: <dict> // CHECK-NEXT: <key>line</key><integer>120</integer> -// CHECK-NEXT: <key>col</key><integer>19</integer> +// CHECK-NEXT: <key>col</key><integer>20</integer> // CHECK-NEXT: <key>file</key><integer>0</integer> // CHECK-NEXT: </dict> // CHECK-NEXT: </array> @@ -1535,7 +1535,7 @@ namespace PR17746 { // CHECK-NEXT: </dict> // CHECK-NEXT: <dict> // CHECK-NEXT: <key>line</key><integer>120</integer> -// CHECK-NEXT: <key>col</key><integer>19</integer> +// CHECK-NEXT: <key>col</key><integer>20</integer> // CHECK-NEXT: <key>file</key><integer>0</integer> // CHECK-NEXT: </dict> // CHECK-NEXT: </array> @@ -1787,7 +1787,7 @@ namespace PR17746 { // CHECK-NEXT: </dict> // CHECK-NEXT: <dict> // CHECK-NEXT: <key>line</key><integer>128</integer> -// CHECK-NEXT: <key>col</key><integer>32</integer> +// CHECK-NEXT: <key>col</key><integer>33</integer> // CHECK-NEXT: <key>file</key><integer>0</integer> // CHECK-NEXT: </dict> // CHECK-NEXT: </array> Modified: cfe/trunk/unittests/AST/SourceLocationTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/SourceLocationTest.cpp?rev=201926&r1=201925&r2=201926&view=diff ============================================================================== --- cfe/trunk/unittests/AST/SourceLocationTest.cpp (original) +++ cfe/trunk/unittests/AST/SourceLocationTest.cpp Fri Feb 21 20:59:41 2014 @@ -211,6 +211,16 @@ TEST(CXXFunctionalCastExpr, SourceRange) functionalCastExpr(), Lang_CXX11)); } +TEST(CXXConstructExpr, SourceRange) { + RangeVerifier<CXXConstructExpr> Verifier; + Verifier.expectRange(3, 14, 3, 19); + EXPECT_TRUE(Verifier.match( + "struct A { A(int, int); };\n" + "void f(A a);\n" + "void g() { f({0, 0}); }", + constructExpr(), Lang_CXX11)); +} + TEST(CXXTemporaryObjectExpr, SourceRange) { RangeVerifier<CXXTemporaryObjectExpr> Verifier; Verifier.expectRange(2, 6, 2, 12); _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
