svn commit: r294604 - in vendor/clang/dist: lib/CodeGen lib/Sema test/OpenMP test/SemaTemplate

Dimitry Andric dim at FreeBSD.org
Fri Jan 22 21:17:14 UTC 2016


Author: dim
Date: Fri Jan 22 21:17:12 2016
New Revision: 294604
URL: https://svnweb.freebsd.org/changeset/base/294604

Log:
  Vendor import of clang release_38 branch r258549:
  https://llvm.org/svn/llvm-project/cfe/branches/release_38@258549

Modified:
  vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.cpp
  vendor/clang/dist/lib/CodeGen/CGStmtOpenMP.cpp
  vendor/clang/dist/lib/CodeGen/CodeGenFunction.h
  vendor/clang/dist/lib/Sema/SemaTemplate.cpp
  vendor/clang/dist/test/OpenMP/parallel_reduction_codegen.cpp
  vendor/clang/dist/test/SemaTemplate/default-arguments.cpp

Modified: vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.cpp	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.cpp	Fri Jan 22 21:17:12 2016	(r294604)
@@ -3548,14 +3548,16 @@ void CGOpenMPRuntime::emitReduction(Code
               E = CGF.EmitAnyExpr(EExpr);
             CGF.EmitOMPAtomicSimpleUpdateExpr(
                 X, E, BO, /*IsXLHSInRHSPart=*/true, llvm::Monotonic, Loc,
-                [&CGF, UpExpr, VD, IPriv](RValue XRValue) {
+                [&CGF, UpExpr, VD, IPriv, Loc](RValue XRValue) {
                   CodeGenFunction::OMPPrivateScope PrivateScope(CGF);
-                  PrivateScope.addPrivate(VD, [&CGF, VD, XRValue]() -> Address {
-                    Address LHSTemp = CGF.CreateMemTemp(VD->getType());
-                    CGF.EmitStoreThroughLValue(
-                        XRValue, CGF.MakeAddrLValue(LHSTemp, VD->getType()));
-                    return LHSTemp;
-                  });
+                  PrivateScope.addPrivate(
+                      VD, [&CGF, VD, XRValue, Loc]() -> Address {
+                        Address LHSTemp = CGF.CreateMemTemp(VD->getType());
+                        CGF.emitOMPSimpleStore(
+                            CGF.MakeAddrLValue(LHSTemp, VD->getType()), XRValue,
+                            VD->getType().getNonReferenceType(), Loc);
+                        return LHSTemp;
+                      });
                   (void)PrivateScope.Privatize();
                   return CGF.EmitAnyExpr(UpExpr);
                 });

Modified: vendor/clang/dist/lib/CodeGen/CGStmtOpenMP.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGStmtOpenMP.cpp	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/lib/CodeGen/CGStmtOpenMP.cpp	Fri Jan 22 21:17:12 2016	(r294604)
@@ -2163,17 +2163,17 @@ static void emitSimpleAtomicStore(CodeGe
   }
 }
 
-static void emitSimpleStore(CodeGenFunction &CGF, LValue LVal, RValue RVal,
-                            QualType RValTy, SourceLocation Loc) {
-  switch (CGF.getEvaluationKind(LVal.getType())) {
+void CodeGenFunction::emitOMPSimpleStore(LValue LVal, RValue RVal,
+                                         QualType RValTy, SourceLocation Loc) {
+  switch (getEvaluationKind(LVal.getType())) {
   case TEK_Scalar:
-    CGF.EmitStoreThroughLValue(RValue::get(convertToScalarValue(
-                                   CGF, RVal, RValTy, LVal.getType(), Loc)),
-                               LVal);
+    EmitStoreThroughLValue(RValue::get(convertToScalarValue(
+                               *this, RVal, RValTy, LVal.getType(), Loc)),
+                           LVal);
     break;
   case TEK_Complex:
-    CGF.EmitStoreOfComplex(
-        convertToComplexValue(CGF, RVal, RValTy, LVal.getType(), Loc), LVal,
+    EmitStoreOfComplex(
+        convertToComplexValue(*this, RVal, RValTy, LVal.getType(), Loc), LVal,
         /*isInit=*/false);
     break;
   case TEK_Aggregate:
@@ -2201,7 +2201,7 @@ static void EmitOMPAtomicReadExpr(CodeGe
   // list.
   if (IsSeqCst)
     CGF.CGM.getOpenMPRuntime().emitFlush(CGF, llvm::None, Loc);
-  emitSimpleStore(CGF, VLValue, Res, X->getType().getNonReferenceType(), Loc);
+  CGF.emitOMPSimpleStore(VLValue, Res, X->getType().getNonReferenceType(), Loc);
 }
 
 static void EmitOMPAtomicWriteExpr(CodeGenFunction &CGF, bool IsSeqCst,
@@ -2459,7 +2459,7 @@ static void EmitOMPAtomicCaptureExpr(Cod
     }
   }
   // Emit post-update store to 'v' of old/new 'x' value.
-  emitSimpleStore(CGF, VLValue, NewVVal, NewVValType, Loc);
+  CGF.emitOMPSimpleStore(VLValue, NewVVal, NewVValType, Loc);
   // OpenMP, 2.12.6, atomic Construct
   // Any atomic construct with a seq_cst clause forces the atomically
   // performed operation to include an implicit flush operation without a

Modified: vendor/clang/dist/lib/CodeGen/CodeGenFunction.h
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CodeGenFunction.h	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/lib/CodeGen/CodeGenFunction.h	Fri Jan 22 21:17:12 2016	(r294604)
@@ -2211,6 +2211,8 @@ public:
   llvm::Function *GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S);
   void GenerateOpenMPCapturedVars(const CapturedStmt &S,
                                   SmallVectorImpl<llvm::Value *> &CapturedVars);
+  void emitOMPSimpleStore(LValue LVal, RValue RVal, QualType RValTy,
+                          SourceLocation Loc);
   /// \brief Perform element by element copying of arrays with type \a
   /// OriginalType from \a SrcAddr to \a DestAddr using copying procedure
   /// generated by \a CopyGen.

Modified: vendor/clang/dist/lib/Sema/SemaTemplate.cpp
==============================================================================
--- vendor/clang/dist/lib/Sema/SemaTemplate.cpp	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/lib/Sema/SemaTemplate.cpp	Fri Jan 22 21:17:12 2016	(r294604)
@@ -3281,7 +3281,6 @@ SubstDefaultTemplateArgument(Sema &SemaR
   for (unsigned i = 0, e = Param->getDepth(); i != e; ++i)
     TemplateArgLists.addOuterTemplateArguments(None);
 
-  Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
   EnterExpressionEvaluationContext ConstantEvaluated(SemaRef,
                                                      Sema::ConstantEvaluated);
   return SemaRef.SubstExpr(Param->getDefaultArgument(), TemplateArgLists);

Modified: vendor/clang/dist/test/OpenMP/parallel_reduction_codegen.cpp
==============================================================================
--- vendor/clang/dist/test/OpenMP/parallel_reduction_codegen.cpp	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/test/OpenMP/parallel_reduction_codegen.cpp	Fri Jan 22 21:17:12 2016	(r294604)
@@ -158,6 +158,7 @@ int main() {
   int vec[] = {1, 2};
   S<float> s_arr[] = {1, 2};
   S<float> var(3), var1;
+  float _Complex cf;
 #pragma omp parallel reduction(+:t_var) reduction(&:var) reduction(&& : var1) reduction(min: t_var1)
   {
     vec[0] = t_var;
@@ -169,6 +170,8 @@ int main() {
       vec[0] = t_var;
       s_arr[0] = var;
     }
+#pragma omp parallel reduction(+ : cf)
+    ;
   return tmain<int>();
 #endif
 }
@@ -178,6 +181,7 @@ int main() {
 // CHECK: call {{.*}} [[S_FLOAT_TY_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]])
 // CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 6, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [2 x i32]*, float*, [2 x [[S_FLOAT_TY]]]*, [[S_FLOAT_TY]]*, [[S_FLOAT_TY]]*, float*)* [[MAIN_MICROTASK:@.+]] to void
 // CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 6, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [2 x i32]*, float*, [2 x [[S_FLOAT_TY]]]*, [[S_FLOAT_TY]]*, [[S_FLOAT_TY]]*, float*)* [[MAIN_MICROTASK1:@.+]] to void
+// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, { float, float }*)* [[MAIN_MICROTASK2:@.+]] to void
 // CHECK: = call {{.*}}i{{.+}} [[TMAIN_INT:@.+]]()
 // CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]*
 // CHECK: ret

Modified: vendor/clang/dist/test/SemaTemplate/default-arguments.cpp
==============================================================================
--- vendor/clang/dist/test/SemaTemplate/default-arguments.cpp	Fri Jan 22 21:16:50 2016	(r294603)
+++ vendor/clang/dist/test/SemaTemplate/default-arguments.cpp	Fri Jan 22 21:17:12 2016	(r294604)
@@ -179,3 +179,31 @@ struct C {
   C(T t = ); // expected-error {{expected expression}}
 };
 C<int> obj;
+
+namespace PR26134 {
+// Make sure when substituting default template arguments we do it in the current context.
+template<class T, bool Val = T::value>
+struct X {};
+
+template<bool B> struct Y {
+  void f() { X<Y> xy; }
+  static const bool value = B;
+};
+
+namespace ns1 {
+template<class T0>
+struct X {
+  template<bool B = T0::value> struct XInner { static const bool value = B; };
+};
+template<bool B> struct S { static const bool value = B; };
+#if __cplusplus > 199711L
+template<bool B> struct Y {
+  static constexpr bool f() { return typename X<S<B>>::template XInner<>{}.value; }
+  static_assert(f() == B, "");
+};
+Y<true> y;
+Y<false> y2;
+#endif
+
+} // end ns1
+} // end ns PR26134


More information about the svn-src-all mailing list