[llvm-commits] [gcc-plugin] r81330 - /gcc-plugin/trunk/llvm-convert.cpp

Duncan Sands baldrick at free.fr
Wed Sep 9 03:07:42 PDT 2009


Author: baldrick
Date: Wed Sep  9 05:07:42 2009
New Revision: 81330

URL: http://llvm.org/viewvc/llvm-project?rev=81330&view=rev
Log:
Get EmitBuiltinVAStart working by calling fold_builtin_next_arg
on the call expression itself rather than on TREE_CHAIN of the
argument.

Modified:
    gcc-plugin/trunk/llvm-convert.cpp

Modified: gcc-plugin/trunk/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/gcc-plugin/trunk/llvm-convert.cpp?rev=81330&r1=81329&r2=81330&view=diff

==============================================================================
--- gcc-plugin/trunk/llvm-convert.cpp (original)
+++ gcc-plugin/trunk/llvm-convert.cpp Wed Sep  9 05:07:42 2009
@@ -6112,27 +6112,26 @@
 }
 
 bool TreeToLLVM::EmitBuiltinVAStart(tree exp) {
-  tree arglist = CALL_EXPR_ARGS(exp);
-  tree fntype = TREE_TYPE(current_function_decl);
+  if (call_expr_nargs(exp) < 2) {
+    error_at (EXPR_LOCATION(exp), "too few arguments to function %<va_start%>");
+    return true;
+  }
 
+  tree fntype = TREE_TYPE(current_function_decl);
   if (TYPE_ARG_TYPES(fntype) == 0 ||
       (TREE_VALUE(tree_last(TYPE_ARG_TYPES(fntype))) == void_type_node)) {
-    error("`va_start' used in function with fixed args");
+    error("%<va_start%> used in function with fixed args");
     return true;
   }
 
-  tree chain = TREE_CHAIN(arglist);
-
   // Check for errors.
-  if (fold_builtin_next_arg (chain, true))
+  if (fold_builtin_next_arg (exp, true))
     return true;
 
-  Value *ArgVal = Emit(TREE_VALUE(arglist), 0);
-
-  Constant *llvm_va_start_fn = Intrinsic::getDeclaration(TheModule,
-                                                         Intrinsic::vastart);
+  Constant *va_start = Intrinsic::getDeclaration(TheModule, Intrinsic::vastart);
+  Value *ArgVal = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
   ArgVal = BitCastToType(ArgVal, PointerType::getUnqual(Type::getInt8Ty(Context)));
-  Builder.CreateCall(llvm_va_start_fn, ArgVal);
+  Builder.CreateCall(va_start, ArgVal);
   return true;
 }
 





More information about the llvm-commits mailing list