r225361 - Revert r225085, it caused PR22096.

Nico Weber nicolasweber at gmx.de
Wed Jan 7 10:23:09 PST 2015


Author: nico
Date: Wed Jan  7 12:23:08 2015
New Revision: 225361

URL: http://llvm.org/viewvc/llvm-project?rev=225361&view=rev
Log:
Revert r225085, it caused PR22096.

PR22096 has several test cases that assert that look fairly different. I'm
adding one of those as an automated test, but when relanding the other cases
should probably be checked as well.

Modified:
    cfe/trunk/lib/CodeGen/CGCall.cpp
    cfe/trunk/lib/CodeGen/CGDebugInfo.h
    cfe/trunk/test/CodeGenCXX/crash.cpp

Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=225361&r1=225360&r2=225361&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Wed Jan  7 12:23:08 2015
@@ -2680,6 +2680,10 @@ void CodeGenFunction::EmitCallArgs(CallA
                                    const FunctionDecl *CalleeDecl,
                                    unsigned ParamsToSkip,
                                    bool ForceColumnInfo) {
+  CGDebugInfo *DI = getDebugInfo();
+  SourceLocation CallLoc;
+  if (DI) CallLoc = DI->getLocation();
+
   // We *have* to evaluate arguments from right to left in the MS C++ ABI,
   // because arguments are destroyed left to right in the callee.
   if (CGM.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) {
@@ -2700,6 +2704,8 @@ void CodeGenFunction::EmitCallArgs(CallA
       EmitCallArg(Args, *Arg, ArgTypes[I]);
       emitNonNullArgCheck(*this, Args.back().RV, ArgTypes[I], Arg->getExprLoc(),
                           CalleeDecl, ParamsToSkip + I);
+      // Restore the debug location.
+      if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
     }
 
     // Un-reverse the arguments we just evaluated so they match up with the LLVM
@@ -2714,6 +2720,8 @@ void CodeGenFunction::EmitCallArgs(CallA
     EmitCallArg(Args, *Arg, ArgTypes[I]);
     emitNonNullArgCheck(*this, Args.back().RV, ArgTypes[I], Arg->getExprLoc(),
                         CalleeDecl, ParamsToSkip + I);
+    // Restore the debug location.
+    if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
   }
 }
 

Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=225361&r1=225360&r2=225361&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Wed Jan  7 12:23:08 2015
@@ -222,6 +222,9 @@ public:
   /// invalid it is ignored.
   void setLocation(SourceLocation Loc);
 
+  /// getLocation - Return the current source location.
+  SourceLocation getLocation() const { return CurLoc; }
+
   /// EmitLocation - Emit metadata to indicate a change in line/column
   /// information in the source file.
   /// \param ForceColumnInfo  Assume DebugColumnInfo option is true.

Modified: cfe/trunk/test/CodeGenCXX/crash.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/crash.cpp?rev=225361&r1=225360&r2=225361&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/crash.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/crash.cpp Wed Jan  7 12:23:08 2015
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 %s -std=c++11 -emit-llvm-only
+// RUN: %clang_cc1 -emit-obj -o %t -gline-tables-only -O2 -std=c++11 %s
 // CHECK that we don't crash.
 
 // PR11676's example is ill-formed:
@@ -33,3 +34,28 @@ template <class ELFT> void finalizeDefau
 
 void f() { finalizeDefaultAtomValues<int>(); }
 }
+
+namespace PR22096 {
+class _String_val {
+  union _Bxty { int i; } _Bx;
+};
+struct string : public _String_val {
+  string(const char *_Ptr) : _String_val() {}
+};
+
+
+int ConvertIPv4NumberToIPv6Number(int);
+struct IPEndPoint {
+  IPEndPoint();
+  IPEndPoint(const int &address, int port);
+  const int &address() const {}
+};
+
+struct SourceAddressTokenTest {
+  SourceAddressTokenTest()
+      : ip4_dual_(ConvertIPv4NumberToIPv6Number(ip4_.address()), 1) {}
+  const string kPrimary = "<primary>";
+  IPEndPoint ip4_;
+  IPEndPoint ip4_dual_;
+} s;
+}





More information about the cfe-commits mailing list